我有一些C#代码使用CSharpCodeProvider.CompileAssemblyFromSource在内存中创建程序集。程序集被垃圾回收后,我的应用程序使用的内存比创建程序集之前多。我的代码在ASP.NET网络应用程序中,但我在WinForm中复制了这个问题。我正在使用System.GC.GetTotalMemory(true)和RedGateANTSMemoryProfiler来测量增长(示例代码大约600字节)。从我所做的搜索来看,这听起来像是泄漏来自新类型的创建,而不是真正来self持有引用的任何对象。我找到的一些网页提到了有关AppDomain的内容,但我不明白。有人可
我想用委托(delegate)在单独的AppDomain中执行一些代码。我该怎么做?UPD1:关于我的问题的更多细节我的程序处理一些数据(一个迭代是:从数据库获取一些数据,评估它并在运行时创建程序集,执行动态程序集并将结果写入数据库)。当前解决方案:每次迭代都在单独的线程中运行。更好的解决方案:每次迭代都在单独的AppDomain中运行(以卸载动态组件)。UPD2:所有,感谢您的回答。我在这个线程中为我找到了一个:ReplacingProcess.StartwithAppDomains 最佳答案 虽然您可以调用将由单独的AppDom
我想用委托(delegate)在单独的AppDomain中执行一些代码。我该怎么做?UPD1:关于我的问题的更多细节我的程序处理一些数据(一个迭代是:从数据库获取一些数据,评估它并在运行时创建程序集,执行动态程序集并将结果写入数据库)。当前解决方案:每次迭代都在单独的线程中运行。更好的解决方案:每次迭代都在单独的AppDomain中运行(以卸载动态组件)。UPD2:所有,感谢您的回答。我在这个线程中为我找到了一个:ReplacingProcess.StartwithAppDomains 最佳答案 虽然您可以调用将由单独的AppDom
我想动态加载一个或多个DLL,以便它们以与我的主应用程序不同的安全性或基本路径运行。如何将这些DLL加载到单独的AppDomain中并从中实例化对象? 最佳答案 更具体地说AppDomaindomain=AppDomain.CreateDomain("Newdomainname");//DootherthingstothedomainlikesetthesecuritypolicystringpathToDll=@"C:\myDll.dll";//FullpathtodllyouwanttoloadTypet=typeof(Type
我想动态加载一个或多个DLL,以便它们以与我的主应用程序不同的安全性或基本路径运行。如何将这些DLL加载到单独的AppDomain中并从中实例化对象? 最佳答案 更具体地说AppDomaindomain=AppDomain.CreateDomain("Newdomainname");//DootherthingstothedomainlikesetthesecuritypolicystringpathToDll=@"C:\myDll.dll";//FullpathtodllyouwanttoloadTypet=typeof(Type
我需要在我的应用程序中使用跨应用程序域调用,有时我会遇到此RemotingException:Object'/2fa53226_da41_42ba_b185_ec7d9c454712/ygiw+xfegmkhdinj7g2kpkhc_7.rem'hasbeendisconnectedordoesnotexistattheserver.目标对象还活着,我查过了。UPD我在目标对象的终结器中设置了断点,但它从未命中。因此,这个对象是事件的并且没有被GC。 最佳答案 那可能是因为服务器端的本地垃圾收集器收集了对象。您可以通过续租来防止这种
我需要在我的应用程序中使用跨应用程序域调用,有时我会遇到此RemotingException:Object'/2fa53226_da41_42ba_b185_ec7d9c454712/ygiw+xfegmkhdinj7g2kpkhc_7.rem'hasbeendisconnectedordoesnotexistattheserver.目标对象还活着,我查过了。UPD我在目标对象的终结器中设置了断点,但它从未命中。因此,这个对象是事件的并且没有被GC。 最佳答案 那可能是因为服务器端的本地垃圾收集器收集了对象。您可以通过续租来防止这种
背景我有一个Windows服务,它使用各种第三方DLL来处理PDF文件。这些操作会占用相当多的系统资源,并且在发生错误时偶尔会出现内存泄漏。DLL是其他非托管DLL的托管包装器。当前解决方案在一种情况下,我已经通过在专用控制台应用程序中包装对其中一个DLL的调用并通过Process.Start()调用该应用程序来缓解此问题。如果操作失败并且存在内存泄漏或未释放的文件句柄,则无关紧要。该过程将结束,操作系统将恢复句柄。我想将同样的逻辑应用到我的应用程序中使用这些DLL的其他地方。但是,我对在我的解决方案中添加更多控制台项目并编写更多样板代码来调用Process.Start()并解析控制台
背景我有一个Windows服务,它使用各种第三方DLL来处理PDF文件。这些操作会占用相当多的系统资源,并且在发生错误时偶尔会出现内存泄漏。DLL是其他非托管DLL的托管包装器。当前解决方案在一种情况下,我已经通过在专用控制台应用程序中包装对其中一个DLL的调用并通过Process.Start()调用该应用程序来缓解此问题。如果操作失败并且存在内存泄漏或未释放的文件句柄,则无关紧要。该过程将结束,操作系统将恢复句柄。我想将同样的逻辑应用到我的应用程序中使用这些DLL的其他地方。但是,我对在我的解决方案中添加更多控制台项目并编写更多样板代码来调用Process.Start()并解析控制台
这是我的initialquestion的跟进我想介绍我的发现并寻求更正、想法和见解。我的发现(或者更确切地说是解释)来自人们对我之前问题的回答,阅读MSDN.NET3.5文档和调试.NET3.5代码。我希望这对像我一样想知道如何检测应用程序何时终止的人有值(value)。事件:System.AppDomain.CurrentDomain.ProcessExit:在进程退出时引发,例如在默认的AppDomain之后,其他所有东西都被卸载了[总执行时间限制在3秒内!]。对于WPF,请改用System.Windows.Application.Exit。对于Windows窗体,在main方法中