System.Collections.Generic.List <T>размер в памяти - PullRequest
2 голосов
/ 23 февраля 2011

Просто интересно, пытался ли кто-нибудь когда-нибудь определить фактический размер System.Collections.Generic.List в памяти?

В настоящее время я кеширую один такой объект с помощью System.HttpRuntime.Cache, который, кажется, работает хорошо, но я бы хотел определить реальное влияние на мой сервер.

using (System.IO.MemoryStream stream = new System.IO.MemoryStream(capacity)) 
{ 
        new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter().Serialize(stream, obj); 
        thisSerialized = stream.ToArray(); 
        return thisSerialized.Length; 
} 

Это работает для других, но не для того, что мне нужно.

1 Ответ

7 голосов
/ 23 февраля 2011

Серийный размер списка будет совершенно неактуален.

A List<T> будет иметь немного служебной информации (два int s) и массив размером Capacity.

Массивы ссылочных типов используют IntPtr.Size (4 или 8) байтов памяти на элемент; массивы типов значений используют Marshal.SizeOf(type) байт памяти на элемент.
(Массивы также имеют некоторые накладные расходы)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...