回答
你讓我的權利,直到你說:
爲了徹底消除任何潛在的內存泄漏?
如果您想在另一個應用程序域中運行代碼,那麼在如何執行此操作時會有大量資源,例如Executing Code in Another Application Domain (C# and Visual Basic)。基本原則是創建一個繼承自MarshalByRefObject
的類。然後創建新的應用程序域,並指示它創建一個對象的實例 - 這個對象就是那麼你的「切入點」到你的應用程序域:
AppDomain newAppDomain = AppDomain.CreateDomain("NewApplicationDomain");
ProxyObject proxy = (ProxyObject)newAppDomain.CreateInstanceAndUnwrap("MyAssembly", "MyNamespace.MyProxy");
但是在C#中確實沒有任何這樣的事情作爲「內存泄漏」,充其量只是無意中保留了一些對象。如果是這種情況,那麼應用程序域只是矯枉過正 - 你真正需要做的就是刪除對不再需要的託管對象的引用,並且垃圾收集器將爲你整理它們。
如果您在非託管代碼中存在真正的內存泄漏,則應用程序域也不會對您有所幫助。非託管類型不受應用程序域限制,因此,在應用程序域被「銷燬」時,在應用程序域內分配的任何非託管內存都不會被釋放。在這種情況下,您最好使用單獨的進程。
這是真實的和正確的。不過,我認爲OP期待着一個'AppDomain'在「關閉」(包括非託管資源)時得到清理 - 就像Windows在退出時爲其處理一樣。然而不幸的是,我沒有辦法(我知道)卸載一個加載的AppDomain。以編程方式將自己的應用程序域加載到內存中的一個主要缺點是它會引入內存泄漏。您加載的每個「AppDomain」都將在內存中,直到進程退出。 – BrainSlugs83
@ BrainSlugs83 [AppDomain.Unload(newAppDomain)](http://msdn.microsoft.com/en-us/library/system.appdomain.unload%28v=vs.110%29.aspx)。這不如在單獨的進程中隔離你的代碼,但會釋放.Net GC分配的內存,最終確定對象等......最重要的是,卸載已加載到該應用程序域的程序集。 – Justin
啊,我的不好,我把'AppDomains'與'Assemblies'混淆了(我知道這很荒謬!)。謝謝你在那裏糾正我。 - (對於其他人:[見Jason Zander的博客:「爲什麼沒有Assembly.Unload方法?」](http://blogs.msdn.com/b/jasonz/archive/2004/05/31/145105的.aspx)) – BrainSlugs83
你不行。一個進程是獨立的和獨立的,你不能將一個線程從一個進程轉移到另一個進程中。
但是,如果您絕對不能在內部修復內存泄漏,您可以做的是創建一個看門狗程序,該程序在停止運行時啓動應用程序,並將您的應用程序設置爲僅在單一執行模式下運行。
我創建了一個類,允許你在一個單獨的應用程序域,這將允許你處置的應用領域,並重新創建執行代碼:Executing Code in a Separate Application Domain Using C#
- 1. android可以執行另一個應用程序代碼
- 2. 如何在另一個子程序中執行部分代碼
- 3. Android應用程序中的C/C++代碼如何執行?
- 4. 如何在WinRT C#應用程序中執行Javascript代碼?
- 5. 如何在C#代碼運行另一個安裝的程序
- 6. 在Visual Studio代碼中構建一個C++程序代碼
- 7. 從C#代碼執行外部程序
- 8. 我想在完成另一個代碼後執行一個代碼
- 9. .NET應用程序中的c#代碼
- 10. 代碼(java,多線程)在一行代碼後停止執行
- 11. 在另一個用戶環境中執行代碼
- 12. 從c#窗體應用程序執行python 3代碼
- 13. 在linux中使用java執行C程序目標代碼
- 14. 每分鐘在控制檯應用程序中執行代碼
- 15. 在應用程序購買中執行代碼
- 16. 如何在mac上的visual studio代碼中執行C#代碼
- 17. C#執行代碼從另一個按鈕
- 18. 在應用程序代碼中使用Tomcats配置的執行程序?
- 19. 瞭解子代程序在此代碼中的執行方式
- 20. 當Console.ReadLine()執行時,C#控制檯應用程序執行代碼
- 21. UWP-從應用程序的代碼中讀取.csproj的應用程序代碼
- 22. 運行Android應用程序的代碼
- 23. 在C#中執行Powershell Cmdlet代碼#
- 24. 在C#中執行.NET IL代碼#
- 25. 在C#中執行實時代碼.net
- 26. 在Nuget包中執行C#代碼
- 27. 如何在C#中執行Javascript代碼
- 28. 無法在C#中的DownloadFileAsync之後執行下一個代碼?
- 29. 如何在應用程序關閉時執行cordova中的一段代碼
- 30. C++代碼只能在終端運行程序時執行
那些是窗口服務? –
可能重複:在另一個應用程序中訪問AppDomain? http://stackoverflow.com/questions/6529249/get-access-to-appdomain-in-another-app/6531610#6531610 –