Сколько памяти C#/.NET возражает использованию?

Для тех, кто не знает, как использовать PDO (исходя из функций mysql_), я сделал очень, очень простую PDO-обертку , которая представляет собой один файл. Он существует, чтобы показать, насколько легко выполнять все обычные приложения, которые необходимо выполнить. Работает с PostgreSQL, MySQL и SQLite.

В основном читайте

, когда вы читаете руководство , чтобы узнать, как использовать функции PDO в реальной жизни, чтобы упростить хранить и извлекать значения в нужном формате.

Мне нужен один столбец

$count = DB::column('SELECT COUNT(*) FROM `user`);

Мне нужны результаты массива (key => value) (т. е. для создания selectbox)

$pairs = DB::pairs('SELECT `id`, `username` FROM `user`);

Мне нужен результат одной строки

$user = DB::row('SELECT * FROM `user` WHERE `id` = ?', array($user_id));

Мне нужен массив результатов

$banned_users = DB::fetch('SELECT * FROM `user` WHERE `banned` = ?', array(TRUE));

52
задан Parth Jani 24 February 2014 в 01:31
поделиться

6 ответов

Вы могли использовать профилировщика памяти как

Профилировщик Памяти.NET ( http://memprofiler.com/ )

или

(свободный) Профилировщик CLR ( http://clrprofiler.codeplex.com/ )

40
ответ дан Frank V 7 November 2019 в 09:11
поделиться

Эти профилировщик памяти МУРАВЬЕВ скажет Вам точно, сколько выделяется для каждого объекта/метода/и т.д.

11
ответ дан Michael Haren 7 November 2019 в 09:11
поделиться

Вот связанное сообщение , где мы обсудили определение размера ссылочных типов.

10
ответ дан Community 7 November 2019 в 09:11
поделиться

Для получения общего смысла для выделения памяти в приложении используйте следующую команду SOS в Примечании WinDbg

!dumpheap -stat

это! dumpheap только дает Вам байты самого типа объекта и не включает байты никаких других типов объектов, на которые это могло бы сослаться.

, Если Вы хотите видеть общие сохраненные байты (суммируют все байты всех объектов, на которые ссылается Ваш объект) типа конкретного объекта, используйте профилировщика памяти как точечная Трассировка - http://www.jetbrains.com/profiler/

6
ответ дан Sean 7 November 2019 в 09:11
поделиться

Каждый "класс" требует, чтобы достаточно памяти содержало весь, его - скомпилированный код монеты в пять центов для всего, что это - участники, которых позвонило время выполнения, (хотя, если Вы надеваете; t называют метод в течение достаточно долгого времени, CLR может освободить ту память и перемонету в пять центов он снова, если Вы называете его снова... плюс достаточно памяти для содержания всех статических переменных, объявленных в классе..., но эта память выделяется только однажды в классе, неважно, сколько экземпляров класса Вы создаете.

Для каждого экземпляра класса, который Вы создаете, (и не был Собран "мусор") можно ли приблизить объем потребляемой памяти сложением использования памяти каждой основанной на экземпляре заявленной переменной... (поле)

ссылочные переменные (судьи к другим объектам) берут 4 или 8 байтов (ОС на 32/64 бита?) int16, Int32, Int64 берут 2,4, или 8 байтов, соответственно...

строковая переменная берет дополнительное устройство хранения данных для некоторых элементов метаданных, (плюс размер указателя адреса)

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

и т.д. и т.д.

6
ответ дан Charles Bretana 7 November 2019 в 09:11
поделиться

Грубый способ может быть таким, если вы хотите знать, что происходит с конкретным объектом

// Measure starting point memory use
GC_MemoryStart = System.GC.GetTotalMemory(true);

// Allocate a new byte array of 20000 elements (about 20000 bytes)
MyByteArray = new byte[20000];

// Obtain measurements after creating the new byte[]
GC_MemoryEnd = System.GC.GetTotalMemory(true);

// Ensure that the Array stays in memory and doesn't get optimized away
GC.KeepAlive(MyByteArray);

, можно получить весь материал процесса, возможно, вот так

long Process_MemoryStart = 0;
Process MyProcess = System.Diagnostics.Process.GetCurrentProcess();
Process_MemoryStart = MyProcess.PrivateMemorySize64;

надеюсь, что это поможет;)

37
ответ дан 7 November 2019 в 09:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: