Ответ 1
Вы можете использовать следующую функцию (истинный параметр сообщает GC для выполнения первой коллекции):
long memory = GC.GetTotalMemory(true);
Возможный дубликат:
Как получить доступную память или использовать ее на С#
Я хочу визуализировать память, которая используется моим приложением в строке состояния моего приложения. Я ищу память, но я не знаю, где. Теперь моя идея - визуализировать используемую память в строке состояния, чтобы я мог ее видеть, пока я работаю с приложением и нахожу часть, где возникает проблема, и затем я могу профилировать это.
Может кто-нибудь дать мне некоторую помощь, как я могу получить использованную память.
Вы можете использовать следующую функцию (истинный параметр сообщает GC для выполнения первой коллекции):
long memory = GC.GetTotalMemory(true);
Вы можете попробовать GC.GetTotalMemory
:
Он извлекает количество байтов, которые в настоящее время считаются выделенными. Параметр указывает, может ли этот метод подождать короткий интервал > перед возвратом, чтобы система могла собирать мусор и завершать > объекты.
или
using System.Diagnostics;
Process currentProc = Process.GetCurrentProcess();
Как только у вас есть ссылка на текущий процесс, вы можете определить его использование памяти, прочитав свойство PrivateMemorySize64.
long memoryUsed = currentProc.PrivateMemorySize64;
Если вы хотите отслеживать память, используемую вашим приложением, вам не нужно писать код для этого. Просто используйте счетчики производительности из Windows (http://www.codeproject.com/Articles/8590/An-Introduction-To-Performance-Counters). Они предоставят необходимую вам информацию с помощью диаграмм! Есть много счетчиков памяти (http://msdn.microsoft.com/en-us/library/x2tyfybc.aspx), один из них будет иметь необходимые данные, и я думаю, это поможет вам узнать, когда ваш приложение начинает использовать больше памяти, чем должно.
Однако, если вам нужно поместить эту информацию в ваше приложение, вы все равно можете использовать счетчики производительности. .NET имеет классы в пространстве имен System.Diagnostics для доступа к своим данным. Посмотрите этот пример: https://weblog.west-wind.com/posts/2014/Sep/27/Capturing-Performance-Counter-Data-for-a-Process-by-Process-Id
Почему бы просто не следить за использованием памяти с помощью TaskManager или с более продвинутыми инструментами из Sysinternals и только после того, как вы определите, какой рабочий процесс повышает использование памяти аномально, а затем профилировать приложение с помощью CLR Profiler или других.