Я использую Profit Profit Profit Profibit для проверки некоторых вещей в своем приложении (работает на WinXP 64). Я вижу много случаев, когда есть один живой экземпляр списка, которое использует мое приложение, которое всегда 32 байта и отображается как массив (например, Products []).. Профилировщик памяти .Net и <GCHandle> pinned
Когда я более подробно рассмотрю экземпляр, он не выглядит так, как будто на что-то ссылается. Если я поставлю флажок «Только экземпляры экземпляров, включенных в корневые пути», список ссылок по умолчанию пуст. Если я снимите этот флажок, я вижу только:
Object[] #307[9126]
<GCHandle> #306 {Pinned}
Распределения стек вызовов выглядит следующим образом:
mscorlib!System.Collections.Generic.List<T>..cctor()
[Skipped frame(s)]
mscorlib!System.Collections.ObjectModel.Collection<T>..ctor()
MyApp.ProductsAdmin!MyApp.ProductsAdmin.ViewModels.ProductsAdminViewModel..ctor() ProductsAdminViewModel.cs
Похоже, его просто заканчивается на строительстве пустого списка. Что это означает, когда нет экземпляров, включенных в корневые пути, и все, что я вижу, является Pinned?
У меня такая же проблема (но для меня это не имеет значения, если я проверить/снимите флажок в «Показывать только экземпляры, включенных в корневых путях» флажок, я всегда получаю корневой патч, как {Закрепленные} -> Object [] -> SomeArray [] когда я создать новый список - почему статический список конструктор, используемый в этом случае? –
leozilla