rcw 是乙個.net類。
1.關閉執行緒對rcw的自動清理
system.threading.thread.currentthread.disablecomobjecteagercleanup();
2.立即清理rcw
system.runtime.interopservices.marshal.cleanupunusedobjectsincurrentcontext();
不過經過實際測試,沒發現有什麼作用,還沒有摸索出應用場合。但是可以肯定的是,立即清理rcw並不會清理rcw,至少還活著(被引用)的rcw不會被清理。
在析構函式執行階段:
如果你**中用了析構函式,試圖清理rcw物件,這個做法可能不如你想象中達成。
究竟rcw是選擇怎樣的時機釋放com的,我不得而知,估計也是類似使用虛構函式或者被gc直接**(但因為我的析構函式有它的引用應該不會)。有虛構函式的物件會比沒有的**速度要慢一級。
另外,rcw並不是真的正確釋放了com,com物件還是存在的,只是rcw不能控制。
如何讓rcw正確清理,這個rcw是否提供什麼機制,這點沒搞清楚。但是客戶類只能通過顯式的dispose介面來寫清理**,並正確呼叫。
雖然很有很多迷霧,為了幫助後人探索,記錄至此。
靜態生存期和動態生存期
靜態生存期 定義 如果某乙個物件的生存期和程式的執行的生存期一樣,則這個物件具有靜態生存期。關鍵字 static 特點靜態變數不會隨著每次函式的呼叫產生乙個新的副本,也不會隨著函式返回而失效。第n次呼叫函式時,靜態變數的值為第n 1次呼叫的靜態變數的值,依次類推!也就是說靜態變數 第一次賦值有效,也...
變數生存期
統計共呼叫counter 函式多少次。count.c檔案 include intmain mycounter.c counter 函式 void counter 函式宣告 void counter 執行結果為 count 1,結果不對。因為counter 函式中的count是區域性變數,自動儲存,每...
變數的生存期
標籤 空格分隔 c 雙學位高階語言程式設計 c函式 這節課我們要學習以下幾個問題 編譯器是如何區分不同作用域中的同名變數的呢?編譯器將它們分配給了不同的位址,所以能夠區分。程式執行時,編譯器是如何為程式分配記憶體空間的呢?儲存區分類 記憶體資料分類 線性從上到下 記憶體低位址端 唯讀儲存區 區唯讀儲...