草庐IT

AppDomains

全部标签

c# - 几个 AppDomains 和 native 代码

我的C#应用程序使用非线程安全的native代码。我可以运行该本地代码的多个进程,使用进程间通信来实现并发。我的问题是,我是否可以改用AppDomains,以便多个托管线程(每个线程位于不同的AppDomain上)调用native代码并且它们不会相互干扰?主要目标是防止进程分离。 最佳答案 不,AppDomains是一个纯粹的托管代码概念。它通过将托管对象根分开来实现隔离。一个AppDomain看不到另一个AppDomain的对象,这使得中止代码和卸载程序集变得非常安全。绝非偶然,它会丢弃所有可能包含状态的数据。非托管代码完全不知道

c# - 用 AppDomains 替换 Process.Start

背景我有一个Windows服务,它使用各种第三方DLL来处理PDF文件。这些操作会占用相当多的系统资源,并且在发生错误时偶尔会出现内存泄漏。DLL是其他非托管DLL的托管包装器。当前解决方案在一种情况下,我已经通过在专用控制台应用程序中包装对其中一个DLL的调用并通过Process.Start()调用该应用程序来缓解此问题。如果操作失败并且存在内存泄漏或未释放的文件句柄,则无关紧要。该过程将结束,操作系统将恢复句柄。我想将同样的逻辑应用到我的应用程序中使用这些DLL的其他地方。但是,我对在我的解决方案中添加更多控制台项目并编写更多样板代码来调用Process.Start()并解析控制台

c# - 用 AppDomains 替换 Process.Start

背景我有一个Windows服务,它使用各种第三方DLL来处理PDF文件。这些操作会占用相当多的系统资源,并且在发生错误时偶尔会出现内存泄漏。DLL是其他非托管DLL的托管包装器。当前解决方案在一种情况下,我已经通过在专用控制台应用程序中包装对其中一个DLL的调用并通过Process.Start()调用该应用程序来缓解此问题。如果操作失败并且存在内存泄漏或未释放的文件句柄,则无关紧要。该过程将结束,操作系统将恢复句柄。我想将同样的逻辑应用到我的应用程序中使用这些DLL的其他地方。但是,我对在我的解决方案中添加更多控制台项目并编写更多样板代码来调用Process.Start()并解析控制台

c# - 在运行时重新编译 C#,没有 AppDomains

假设我有两个C#应用程序-game.exe(XNA,需要支持Xbox360)和editor.exe(XNA托管在WinForms中)-它们两者共享一个完成大部分工作的engine.dll程序集。现在假设我想添加某种基于C#的脚本(它不完全是“脚本”,但我会这样调用它)。每个级别都有自己的类继承自基类(我们称之为LevelController)。这些是这些脚本的重要约束:它们需要是真实的编译C#代码他们应该需要最少的手动“胶水”工作,如果有的话它们必须与其他一切运行在同一个AppDomain中对于游戏-这非常简单:所有脚本类都可以编译成一个程序集(例如,levels.dll),并且可以根

c# - 静态变量实例和 AppDomains,发生了什么?

我有publicstaticclassA{publicstaticstringConnString;}[Serializable]publicclassTest{//AccesingA'sfield;publicstringConnString{get{returnA.ConnString;}set{A.ConnString=value;}}}voidMain(){A.ConnString="InitialString";//IsetA.ConnStringinthecurrentdomainvarnewDomain=AppDomain.CreateDomain("DomNew");T