4

我正在做一个项目,我在运行时加载了几个程序集,对于每个程序集,我使用反射来查找一些特定的类,实例化它们并调用它们的方法。所有这些工作正常,但是对于某些调用,该进程遇到堆栈溢出,从而终止了我的整个程序。我无法控制正在加载的程序集的源代码,因此我无法更改正在执行的代码。

我试图解决的问题:

  1. 我分配了一个线程来执行方法的调用,并尝试
    在 timeintervall 后中止线程(我知道这是不好的做法,但我不能更改代码以友好地终止)。然而这不起作用,我认为线程正忙于“stackoverflowing”来处理 Abort 调用。

  2. 我尝试减少线程可以访问的实际内存,这甚至不是解决方案,因为您无法捕获 stackoverflow-exception 所以我的程序无论如何都会终止(更快)

问题:

  1. 线程可以忙到中止吗?有什么方法可以中止具有这种行为的线程吗?
  2. 我们如何才能以一种好的方式调用代码(我们无法控制)?

提前致谢!

4

1 回答 1

6

在“不透明代码”的情况下,推荐的过程是实际派生一个新进程并启动它。这样您可以获得两个好处:

  1. 如果它自己失败了,它就会被隔离,也不会让你的主应用程序宕机。
  2. 你可以安全地杀死它,它不会像中止的线程那样造成麻烦。
于 2012-04-24T17:25:50.740 回答