Jon*_*Jon 9 c# memory multithreading
我见过类似这个问题的一些讨论,但没有什么能真正回答我所面临的问题.
我正在开发一个C#应用程序,可以通过解释脚本自定义软件行为.每个脚本都在C#app的不同子线程上运行.(我正在使用Jint javascript解释器来运行脚本,但我的问题同样适用于线程在.NET应用程序中动态运行的任何其他情况).到目前为止,这工作得很好.但我需要确保应用程序本身的行为.如果一个错误的脚本可能导致应用程序耗尽堆空间,我需要能够检测并停止占用过多内存的任何线程.从概念上讲,这可以看作类似于Web浏览器,确定页面上的javascript是否占用太长或太多的内存来执行.问题是,我无法确定在.NET中是否有任何方法可以做到这一点.
有没有什么方法可以对线程可以利用的内存量进行硬限制,或者从父线程快速检查线程的内存利用率?我不关心线程中的堆栈溢出,只关心堆空间.
当然,"明显的"解决方案是将解释分成单独的进程而不是单独的线程,但这会对我的应用程序造成重大的性能损失,因为这些脚本会修改软件行为,因此旨在紧密耦合.应用程序级监视也不是理想的,因为它不提供有关哪个脚本本身不表现的信息.此外,用于调试的慢速方法将无法工作,因为脚本旨在允许快速修改软件,而不必进行构建,测试和重新部署.我只需要一些合理快速的方法来检测一个占用太多内存的线程,这样我就可以杀死并忽略它的脚本.
谢谢!
WMI 是您的一种选择。我确信您可以监视进程内存使用情况。但你可以更多地探索这个想法。
这是 C# 中 WMI 的简短介绍。您可以查询一整套类。对于查询本地机器统计信息,它不会非常昂贵。但我建议先获取一些性能数据。