2012-09-01 49 views
4

正如我在用於.NET開發人員的Windows 8中看到的,會話.NET處理平臺的本機對象。這些對象支持指針計數器。對我來說很明顯,有託管對象位於託管堆中,並且處於非託管狀態,因此我們不得不在釋放和處理方法中釋放它們。至於現在還不清楚我應該如何處理Windows Runtime中的內存管理。當我不得不擔心託管/非託管資源時,您能否給我一個建議?內存管理如何在Windows運行時工作,以防止我的應用程序資源泄漏?Windows運行時內存管理

UPD:

我的意思是.NET地鐵檔案

回答

4

底層的WinRT接口是基於COM。每個WinRT接口都來自IUnknown,其AddRef和Release方法實現基於引用計數的內存管理。

但是,當你編寫一個WinRT應用程序,然後使用語言投影時,這是非常好的隱藏。對於.NET和Javascript應用程序,語言投影分別內置在CLR和Chakra引擎中。完整的隱藏實現細節,WinRT接口映射到本地語言結構。包括熟練地創建COM支持泛型和實現繼承的錯覺。一個合理的猜測是,CLR投影使用已經內置在CLR中的COM互操作支持,但不可能很容易地對其進行反向工程。如果這是準確的,那麼終結器可能會進行IUnknown :: Release()調用。

現在很難獲得關於底層細節的體面信息,微博客和SO海報不會說話,源代碼不可用,並且涉及該主題的問題正在關閉,如this one

從陳的評論中可以看出,你不應該對此感到好奇。如果你擔心,那麼考慮用C++/CX編程。哪個能夠很好地隱藏膠水。或者WRL庫的本地C++,但不是。內存管理明確的運行時環境。微軟投入了大量的資源來再次使C++編程相關。

+0

非常感謝您的回答。據我所知C#是專門爲.NET設計的。那麼Metro呢?這是否意味着如果我開始開發我的第一個Metro應用程序,我最好選擇C++還是不應該關注預測? Windows運行時是否有任何已知的內存泄漏? –

+0

我讀過上面提到的線程,並沒有得到有關最佳投影的強烈意見。似乎他們都有優點和缺點。 –

+1

WinRT編程的一個重要方面(開發週期相當晚)是現在許多winrt對象都支持ICloseable,它被投影到C#應用程序中作爲IDisposable。這使得.Net和JS應用程序可以實現確定性的最終化。 –