finalizer

    1熱度

    1回答

    我有一個控制器類,在操作過程中,它使用它執行的執行器來執行任務。如果我只是讓gc在超出範圍時清理控制器,那麼JVM似乎不會死亡。我假設這是因爲默認的執行程序不會超時,或者在很長一段時間後超時。 鑑於在控制器仍然可以訪問的情況下執行器不應該被關閉,並且在控制器被垃圾收集之後執行器不會被使用,是否可以安全/可接受地使用終結器來使用: @Override public void finalize() {

    1熱度

    1回答

    假設我需要清理終結器中的一些託管資源,或者至少以線程安全的方式將其記錄在需要清理的地方。根據我的理解,鎖定終結者是嚴格禁止的,但Interlocked類怎麼樣?這是否安全,是否會導致僵局? static int deadentries; ~Item() { Interlocked.Increment(ref deadentries); } public static T Get(int id,

    2熱度

    1回答

    最近我們發現我們的一個服務器應用程序(所以它是windows服務)因OutOfMemory異常而失敗。我們試圖找出發生了什麼事情,並且最終確定隊列中的對象並未最終確定,因此不會發生垃圾回收。我們試圖找出,哪個終結器可以通過使用Windbg導致這種行爲,但我們無法找出究竟是哪個對象導致它。 使用finalizequeue命令,我們可以發現這一點:! 0:053> !finalizequ

    4熱度

    2回答

    C++/CLI定義的類當我實現在C++/CLI DLL的類: public ref class DummyClass { protected: !DummyClass() { // some dummy code: std::cout << "hello" << std::endl; } } ,當我加載DLL到C#項目和通過重複地只使

    1熱度

    2回答

    我有一個C#對象,它是resposible一個的ressource它看起來像這樣: public sealed class CLoadingScope { private bool isDisposed; public CLoadingScope() {} ~CLoadingScope() { // must be dis

    1熱度

    1回答

    我們遇到了WCF的問題,這讓我們花了很長時間來診斷,所以我在這裏發佈它們以防有人遇到類似問題(沒有在其他地方找到引用)。 我們的流程往往會與下面的未處理的異常崩潰: System.NullReferenceException: Object reference not set to an instance of an object. at System.ServiceModel.Channels

    9熱度

    2回答

    考慮下面的代碼: using System; namespace memoryEater { internal class Program { private static void Main(string[] args) { Console.WriteLine("alloc 1"); var big1 = new Bi

    1熱度

    2回答

    我學習Ruby和還沒有找到一種方法來覆蓋等效object.delete功能的缺失運行方式: 這是怎麼了,我這樣做: class Foo @@no_foo=0 def initialize @@no_foo+=1 end def delete #class specific cleanup... @@no_fo

    3熱度

    4回答

    要學習C#native interop,我一直在研究OpenGL封裝。 OpenGL API本身是一個綁定到特定線程的狀態機。當包含本地資源的對象被垃圾收集時,終結器正在GC線程中運行,並且不能直接釋放資源。 我現在的解決方法是在上下文對象中有一個列表,這些對象將它們的資源添加到繪圖循環中的一個安全點並將其釋放並釋放它們。 但是,這個問題的問題是,如果GC正在迭代整個列表時收集,那麼foreach

    0熱度

    1回答

    我們剛剛開始使用穆勒一個月前,迄今爲止這是一個很好的學習。目前,我們已經實施了很多流程來集成我們不同的系統。對我們來說,其中一個要求是在每個流程結束時執行一些清理代碼。更像是一個終結構造。 我正在尋找一種通用的方法,我可以遵循我們所有的流程。 注 - 如果我添加了一個步驟(我可以執行清理代碼)到流程結束 - 不保證該步驟將在所有先前步驟完成後執行(如這些步驟在不同的線程上運行;我們不想在一個同步線