2010-10-26 58 views
1

我有簡單的C#線程有很多屬性。多久的財產是活着的,因爲我存儲一些數據的屬性。屬性存活多久

可以超過1個月存活的財產並存儲數據或更好地使用數據庫。

THX

回答

4

理論上,一個變量只要至少有一個活動引用就保持活動狀態。就你而言,只要包含你的財產的對象仍然在「範圍內」,你的財產的價值就會保留在內存中。對於靜態變量或在main()函數中創建的或屬於應用程序或服務基礎對象的靜態變量,只要程序運行,它就會保留在內存中。

但是,一個月是期待線程運行的很長時間。如果線程遇到一個無法處理的錯誤,它將會終止,並且你失去了線程沒有保存到文件系統或數據庫的所有東西。另外,Web應用程序保存在「應用程序池」中,即使在用戶會話的上下文中,應用程序池也可以「回收」,並且只是在內存中閒置的所有內容都會丟失。因此,如果這些數據在線程運行後或線程之間非常重要,那麼當您的線程開始業務時將其保存在某處。

2

他們還活着,直到他們被垃圾收集 - 所以,如果你離開你的應用程序中運行的下一個百年,而性能保持你的應用程序的使用範圍內,該值將持續無限期。但是,如果您計劃進行長期存儲,那麼數據庫可能會更聰明,因爲您的值將被刪除,例如,如果對象持久化值被移除/解構,應用程序停止,出錯或計算機重置等。

請記住,數據庫可以是任何持久存在的值,無論是平面文件,分層結構還是關係數據庫。

3

只要您的程序可以保持運行超過一個月,數據就會在那裏。這聽起來像你應該真的使用數據庫。如果您斷電或需要重新啓動服務器進行維護會發生什麼情況?

+0

thx爲您的答案 – senzacionale 2010-10-26 20:05:13

3

只要您的應用程序保持生命,您的屬性將保持活動狀態。一個月是一個應用程序坐在那裏很長時間 - 如果你想確保你永遠不會丟失數據,我建議使用數據庫。

+0

thx爲您的答案 – senzacionale 2010-10-26 20:04:17

1

線程是一個執行的路徑,而不是一個對象。對象具有可以存儲數據的屬性。對象(和它們的屬性)並不真正生活一個線程,儘管一個線程可以對它們起作用。線程可以在應用程序執行過程中來回移動。對象在不再被引用後被垃圾收集器刪除。這樣的代碼...

Object o = new Object(); 

...做兩件事情1)創建一個對象,2)創建該對象(鄰的引用)。如果你設置了o = null;,你已經刪除了該對象的唯一引用,並且垃圾收集器很快就會清理它。應用程序中的線程或對象都不會比應用程序本身的運行時間長;當程序結束執行並且進程空間被破壞時,它們都將被擦除。任何需要活躍進程的數據都應該存儲到文件或數據庫表等中。數據可以通過位於線程執行的函數之外的引用的對象中而輕鬆地超越線程,但它不會超越處理。