1 Востаннє редагувалося Betterthanyou (19.05.2020 14:22:34)

Тема: Як виміряти кількість використаної пам'яті

Потрібно виміряти кількість використаної пам'яті. (масив створений для прикладу, мова йде про загальний об'єм використаної пам'яті, під час виконання ділянки коду. array.length - не підійде)

Пробую розібратися з класом GC, якщо викликати GetTotalMemory з параметром ТРУ, це має запустити примусово гарбеч колектора і повернути кількість пам'яті
Були створенні змінні start_mem і used_mem_median, та присвоєно їм значення виконання функції GetTotalMemory, дізнавшись їх різницю, хочу отримати приблизну кількість пам'яті яка була використана.

Масив array спочатку створюється, і зразу ж анулюється (=null), також добавив дужки щоб він був "не в зоні видимості"

Примусово викликаю очищення GC.Collect(); а потім GC.WaitForPendingFinalizers(); і після цього бачу занадто великий результат

long start_mem = GC.GetTotalMemory(true);

            {
                int NN = 1000000;
                int[] array = new int[NN];
                for (int n = 0; n < NN; n++)
                    array[n] = new int();
                array = null;
            }

            GC.Collect();
            GC.WaitForPendingFinalizers();

            double used_mem_median =
                (GC.GetTotalMemory(true) - start_mem);

            Console.WriteLine(
                "Size = " +
                used_mem_median
                );

            Console.ReadKey();

Як заміряти кількість використаної пам'яті?

2

Re: Як виміряти кількість використаної пам'яті

А з якою саме метою?
Загалом бажано запитувати систему, щоб вимірювати витрати пам'яті "ззовні", бо і менеджер пам'яті C#, і системний менеджер, в принципі, можуть резервувати якусь пам'ять - тоді вона буде "вільна" для запитів самого процесу, але "зайнята" для запитів інших. Наприклад, так.

Подякували: Betterthanyou, leofun012

3

Re: Як виміряти кількість використаної пам'яті

koala написав:

А з якою саме метою?

Веб сайт на asp.net займає інколи майже 9 Гб оперативної пам'яті незрозуміло чому (потік користувачів не збільшується). Подивитися в режимі дебагу не можливо, так як сайт працює з багатьма іншими сервісами, потрібні "емулятори" всіх їх.
Виникла така ідея, зробити логер пам'яті, і закинути його на реліз версію сайту, щоб знайти проблемне місце в сайті

4

Re: Як виміряти кількість використаної пам'яті

Я би не шукав якийсь один "справжній" показник, а записував в лог усе, що можна легко зібрати. Наприклад якщо внутрішній менеджер показує копійки, а пам'ять процесу розпухла, значить треба дивитись на нативні бібліотеки, що використовуються.

Подякували: Betterthanyou, leofun012