2012-04-27 37 views
3

我正在使用Scitech的.Net內存分析器來檢查我的應用程序(在WinXP 64上運行)中的一些東西。我看到很多情況下,我的應用程序使用的列表有一個實例,它總是32個字節,並顯示爲一個數組(例如Products [])。.Net內存分析器和<GCHandle>固定

當我仔細看看實例時,它看起來不像任何東西。如果我選中「只顯示根路徑中顯示的實例」複選框,則引用的列表爲空。如果我取消選中該複選框,我只看到:

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 

它看起來像它只是一個空表的構造結束。當根路徑中沒有包含任何實例並且我看到的所有內容都爲固定時,這意味着什麼?

回答

3

的原因是,名單靜態構造函數分配T的空數組使用反射就以它的代碼一看:

static List() 
{ 
    List<T>._emptyArray = new T[0]; 
} 
+0

我有同樣的問題(但對我來說,如果我檢查它不事關/清除要勾選「包含在根目錄的路徑只顯示實例」,我總是得到一個根補丁一樣 {置頂} - > [對象] - >的someArray [] 當我創建一個新的列表 - 爲什麼是靜態列表在這種情況下使用的構造函數? – leozilla 2012-09-07 12:10:25