如何控制.Net/mono中线程的内存使用和执行时间?
Posted
技术标签:
【中文标题】如何控制.Net/mono中线程的内存使用和执行时间?【英文标题】:How to control memory usage and time of execution of a thread in .Net/mono? 【发布时间】:2010-11-20 22:06:48 【问题描述】:我想提供一种方法,让用户可以将插件(程序集)上传到站点以获取脚本建议。通过 mono.cecil,我可以分析这些程序集并将访问权限仅限于预定义的函数列表,但我还需要限制内存使用、执行时间并在线程透支这些资源时终止线程。
我想我可以通过分析器 api 监控内存使用情况,但据我所知,没有工具可以保证中止线程。有什么方法可以保证中止线程吗?也许我应该使用嵌入单声道运行代码并控制应用程序本机部分中线程的执行,这可能吗?
【问题讨论】:
【参考方案1】:只要您不允许插件代码 ResetAbort(),您就可以使用 Thread.Abort()。
【讨论】:
这不是解决办法,因为如果一个线程卡在finally块,即使不使用ResetAbort(),线程也不能被中止。【参考方案2】:线程级别控制不实用恕我直言(过去有人这样做过)。通常,您应该考虑内存使用或应用程序域级别的进程级别控制。
【讨论】:
谢谢,但是根据 msdn (msdn.microsoft.com/en-us/library/system.appdomain.unload.aspx),当我调用 AppDomain.Unload 时,它会尝试中止域的线程,如果此尝试失败,则不会卸载域。 那么过程级别控制似乎是唯一可行的选择。难怪 IE/Chrome 使用这种方法来避免网页挂起。以上是关于如何控制.Net/mono中线程的内存使用和执行时间?的主要内容,如果未能解决你的问题,请参考以下文章