![]() |
1
1
正如Vilx提到的,您可以考虑将“用户”代码放在另一个AppDomain中。
实际上,自.NET 3.5以来,.NET框架已经包含了
看到这个 MSDN 文章和 CLR-Addin team's blog 更多信息。 另外,尽管它并不能解决所有问题,但您可以从触发一个thread.interrupt开始。这将导致以与ThreadAbortException类似的方式引发ThreadInterruptException,但它将在代码中定义的点上发生;当线程阻塞或休眠时,而不是绝对在任何位置发生。在上面提到的紧循环示例中,它可能不会有所帮助,但如果循环有线程,它会有所帮助。sleep(0)。 你可以选择毕业:
|
![]() |
2
1
除非您对.NET运行库的每一个细节都很了解,否则我怀疑您是否能够真正保证您的假设(尤其是4和1)。违反假设4所需要的只是一个静态变量… 如果使用生成的代码,则 AppDomain 更容易停止和卸载,与线程不同,这可以作为宿主进程正常生命周期的一部分完成。 |
![]() |
3
1
thread.abort()肯定会污染您的AppDomain,但我相信它也会破坏整个过程。我找不到这么快的链接。 所以你必须在一个单独的(一次性的)过程中运行它。 |
![]() |
4
1
由于用户代码是动态的(我希望典型的开发人员在编写代码时会进行几十次测试运行),所以您无论如何都要将它放在单独的AppDomain中,以便卸载它。如果是这样,则损坏将只影响单独的AppDomain,它将很快卸载。 现在,我开始怀疑如果用户代码产生另一个线程/AppDomain会发生什么,但这是另一个问题。也许它可以通过一些权限来解决,我对这些完全不熟悉。 |
![]() |
5
1
看看.NET Terrium项目。这是一个对等演示应用程序,旨在演示.NET框架的对等功能和黑客安全性。开发人员可以匿名编写和上传人工智能代码,以控制在数千台机器上作为点对点生态系统运行的虚拟环境中的昆虫。 他们使用反射来确保上传的代码是安全的:你不能做IO,锁是受限制的,还有静态变量。他们也限制了你被允许“思考”的时间。对这个应用程序来说足够好的东西对你来说应该足够好。 |
![]() |
A B · C#Excel自动调整列避免长文本时出错 6 月前 |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 6 月前 |
![]() |
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 6 月前 |
|
Sei · Avalonia/WPF将路由器传递到控制模板 7 月前 |