2011-05-13 32 views
1

我想知道在Full Framework和Compact Framework中,內存消耗是否與兩者兼容的類型和類不同。 我也想知道,如果我的目標是一個緊湊框架(一個.dll庫)的程序集,並在桌面機器中引用它。它會使用完整框架還是緊湊型?如果是後者,我認爲內存消耗應該是相同的,但它是什麼? 我的直覺是,緊湊的框架類型更簡單,因爲它們通常只有較少的方法,並且缺少許多類。但每個對象的內存表示是否相同?這是否取決於架構? (例如,在ARM和x86上運行它) 是否有資源可以找到關於此主題的更多信息?CF vs Full Framework中的內存消耗

回答

1

我想說這取決於你所看到的細節。舉例來說,如果我有一個簡單的目標:

public class Foo 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
} 

然後,它在內存中的表示將是要麼框架下的相同。

但是,如果我從兩個框架之間根本不同的更復雜的類派生,那麼結果在框架之間會有所不同。

如果在FFx中加載,它將使用FFx程序集來實例化實例,所以即使它是爲CF編譯的,FFx也會在FFX運行時加載它,而不是CF.

處理器架構並不重要,因爲這些都編譯爲IL,這是處理器無關的。當然,由於您在託管代碼下討論內存消耗問題,GC如何工作也是一個很重要的因素,並且它們在CF和FFx中的工作方式不同,因此對於相同的類在不同時間之間的佔用空間會有所不同這兩個框架都取決於使用模式。

+2

如果該類有一個字節屬性而不是int屬性,自動生成的字段是否會在移動平臺上按順序映射出來,而不是在非移動平臺上進行邊界上映射? – 2011-05-13 22:26:55

+1

如果第一個字節是一個字節,則它與內存中的字符串數據之間會有一個3字節的「pad」。我很驚訝整個框架不會這樣做(至少這就是我認爲你所說的那樣),因爲對不對齊的訪問執行懲罰,但我從來沒有真的需要去看看整個框架如何擺出來,因爲它是一個封送處理器,它足夠強大,所以我很少需要交出編組的東西。在CF中沒那麼幸運。 – ctacke 2011-05-14 01:46:25

+0

謝謝!這就說得通了。我假設它在CF中總是消耗相同或更少,但從未超過FF。對? – cloudraven 2011-05-14 16:49:33