2016-08-15 55 views
-1

做了很多搜索,但沒有最終澄清我的疑問。c#如何處理靜態成員的內存

當使用靜態類或方法時,c#何時爲它們分配內存?它是否會被釋放?

獎金問題:什麼時候應該使用靜態成員或類?

+0

關於該類的第一次使用。它不會被釋放。 –

+0

關於獎金問題:在需要時使用靜態成員或類。 –

+0

它很可能在編譯時分配內存。但這實際上是一個實現細節,而不是您需要擔心的事情。你想解決什麼問題?爲什麼這很重要? –

回答

1

https://msdn.microsoft.com/en-us/library/79b3xss3.aspx

如同所有類類型的情況下,用於一個靜態類的類型信息被加載時,引用該類別的節目的.NET Framework公共語言運行庫(CLR)加載。該程序無法準確指定該類何時加載。但是,在程序中第一次引用類之前,它會保證被加載並且其字段已初始化並調用其靜態構造函數。靜態構造函數只被調用一次,並且靜態類在您的程序所在的應用程序域的生命週期中保留在內存中。

2

當一個人使用一個靜態類或方法,什麼時候C#爲他們分配內存?

不是C#分配內存的人,而是底層的CLR。您還應該區分分配的內存和實際初始化的成員。

分配當程序(EXE,DLL)加載到內存時可能發生內存。這是因爲在「典型」實現中,靜態數據存儲器分配在所謂的data分段上。這是專用於保持永久(從運行時角度看)數據結構的固定部分。但是,具體的實現可能會有點不同,儘管必須是某種靜態的段,至少要保持指向其他數據結構的指針。

初始化發生在類首次被訪問之前。

它是否會被取消分配?

不,它們是靜態的。


獎金的問題:當一個人應該使用一個靜態成員或類?

附註:這不是一個獎勵問題,而是一個以主要基於意見爲基礎的問題的理由。

+0

謝謝你Ondrej!幫了我很多。 –