我为我的IronPython设置了一个AppDomain来运行:
var appDomainSetup = new AppDomainSetup { ApplicationBase = sandboxPath };
var sandbox = AppDomain.CreateDomain("Sandbox", evidence, appDomainSetup, permissionSet);
当sandboxPath
设置为我的exe目录时,脚本的调用速度很快。"当sandboxPath
设置为包含所有必需dll的文件夹(基本上是用于调用脚本的类和相关的IronPython dll)时,脚本'电话是慢的。"请注意,这些调用正从我的主AppDomain进入我的沙箱AppDomain非常重要。这个问题提出了一些问题,因为我对IronPython的工作方式缺乏了解,而且我的搜索引起了我的几个圈子。 我的主要问题是IronPython如何以及何时加载程序集以及如何使用单独的目录作为其基本降低性能?:
组件是否在AppDomain构造中加载?我在哪里可以阅读AppDomain如何加载程序集和程序集加载器?
当我使用新的AppDomain调用Python.CreateEngine时究竟发生了什么?
最后,假设我在Types.dll中有一些类TypeA
,可以在AppDomains和一些字典类中共享,其中我存储了一堆TypeAs。这些TypeAs是从事物的C#侧设置的(作为Main.proj的一部分)。此存储类具有代理范围值类,因此可以通过IronPython脚本访问它(此范围值在Sandbox.proj中)。使用上面的单独目录设置,我实际上有两个Types.dll,一个在我的exe目录中,一个在我的沙箱目录中。构建C#项目是为了引用exe目录中的那个,而我假设IronPython引用了它的ApplicationBase目录中的那个。为什么这不是问题?这是一个潜在的问题吗?我知道这很容易解决,但我不明白它为什么会起作用。 总结一下:我有两个相同的dll加载到两个独立的AppDomain中,它们通过在这些dll中传递一个类来相互通信,但它并不是真正相同的类。
依赖关系:
Main.proj -> Types.dll // to set the TypeAs read from a file or network
Sandbox.proj -> Types.dll // to read in the scripts
文件夹结构:
bin/Main.exe
bin/Types.dll
bin/Sandbox/Sandbox.dll
bin/Sandbox/Types.dll
欢迎任何帮助和评论。