防止在AppDomain中创建线程

本文关键字:创建 线程 AppDomain | 更新日期: 2023-09-27 18:18:55

我设置了一个小示例,我在没有任何许可的情况下将程序集加载到新的AppDomain中。程序集不能访问文件系统,也不能监听套接字。

但是还有另一件事我想防止:线程创建。为什么?因为从理论上讲,这个程序集可以创建一个线程,它会创建更多的线程,从而淹没我的内存。

我想到了(在我看来)最好的方法:限制AppDomain的内存。这可能吗?如果没有,我能做些什么来避免线程创建?

使用下面的代码创建线程

Thread t = new Thread(this.DoWork);
t.Start();

AppDomain的代码

 PermissionSet set = new PermissionSet(PermissionState.None);
 set.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));
 set.AddPermission(new FileIOPermission(FileIOPermissionAccess.Read |
                                        FileIOPermissionAccess.PathDiscovery, 
                                        this.path));
 AppDomainSetup info = new AppDomainSetup { ApplicationBase = this.path };
 this.domain = AppDomain.CreateDomain("Sandbox", null, info, set, null);  

(好吧,我给了访问文件夹中的文件系统,我想加载程序集,这只是因为StrongName fullTrustAssembly = typeof(SecureInstance).Assembly.Evidence.GetHostEvidence<StrongName>();不为我工作。

希望s/o能帮上忙。(:

防止在AppDomain中创建线程

这个问题似乎很难回答。你能做的是使用。net Profiling API来尝试监控AppDomain中的内存使用情况。你可以在这里找到更多的信息,但你需要做一些挖掘:http://msdn.microsoft.com/en-us/library/bb384493.aspx

无论如何,在一个优先级较低的单独进程中运行你想要运行的东西不是更好吗?这样,如果它在内存分配上疯狂,它不会影响你的进程,操作系统会杀死它,它不会影响你的主进程。