как работает GetAllocatedBytesForCurrentThread ()? как использовать память потоком? - PullRequest
0 голосов
/ 01 ноября 2018

Мне нужен метод для профилирования и записи количества памяти, используемой потоком в основном проекте .net. Я нашел этот интересный метод: GC.GetAllocatedBytesForCurrentThread ();

Как следует из названия метода, я ожидаю получить количество байтов, используемых потоком, но вместо этого я получаю чрезвычайно высокие значения, такие как: 26111439440 байтов, и это невозможно, поскольку не соответствует используемой памяти в диспетчере задач и доступной память на моей машине.

Знаете ли вы другой метод, совместимый с .net core 2.0, который выполняет мою задачу?

UPDATE

GetAllocatedBytesForCurrentThread() прослушивается, нет никакого значения, которое возвращает значение.

Не знаю, если связано, но уже была ошибка (теперь закрыта), связанная с моей ситуацией: https://github.com/dotnet/coreclr/issues/10207 Я сообщил там.

GetAllocatedBytesForCurrentThread() Возвращает накопленную память, используемую потоком, а не объем используемого тока, поэтому, если поток продолжает выделять и освобождать память, функция может возвращать очень высокие значения, даже если вы никогда не использовали столько памяти одновременно

* 1027 Временное решение *:

Нет способа получить надежную память, используемую потоком, но вы можете получить память, используемую процессом:

Process currentProcess = Process.GetCurrentProcess();
long memory = currentProcess.WorkingSet64;

Если вы вычисляете объем памяти до начала потока и после того, как сможете оценить объем памяти, используемый этим.

1 Ответ

0 голосов
/ 05 ноября 2018

GC.GetAllocatedBytesForCurrentThread возвращает общее количество байтов, выделенных текущим потоком, даже если эти выделения уже очищены сборщиком мусора. Не возвращает текущий объем используемой памяти. Для этого вы можете использовать Process.WorkingSet64 или Process.PrivateMemorySize64, в зависимости от того, что вы пытаетесь измерить.

26111439440 - только 24,3 ГБ, что вполне разумно для программы, требующей памяти, выделить в течение срока службы.

...