c# - 在.NET 中快速检查或限制线程内存使用?

标签 c# multithreading memory

我看到了一些与此问题类似的讨论,但没有任何内容能真正回答我所面临的问题。

我正在开发一个可以通过解释脚本自定义软件行为的 C# 应用程序。每个脚本都在 C# 应用程序的不同子线程上运行。 (我正在使用 Jint javascript 解释器来运行脚本,但我的问题对于线程可以在 .NET 应用程序中动态运行的任何其他情况同样有效)。到目前为止,这工作得很好。但我需要确保应用程序能够自行运行。如果出现可能导致应用程序耗尽堆空间的错误脚本,我需要能够检测并停止任何占用过多内存的线程。从概念上讲,这可以看作类似于 Web 浏览器确定页面上的 javascript 是否需要太长时间或太多内存来执行。问题是,我无法确定 .NET 中是否有任何方法可以做到这一点。

有什么方法可以对线程可以使用的内存量进行硬性限制,或者从父线程快速检查线程的内存利用率?我不关心线程内的堆栈溢出,只关心堆空间。

“显而易见”的解决方案当然是将解释拆分为单独的进程而不是单独的线程,但这会对我的应用程序造成重大的性能影响,因为这些脚本会修改软件行为,因此旨在紧密耦合.应用程序级监控也不理想,因为它不会提供有关哪个脚本本身没有运行的信息。此外,用于调试的慢速方法将不起作用,因为脚本旨在允许快速修改软件,而不必构建、测试和重新部署。我只需要一些相当快速的方法来检测占用过多内存的线程,这样我就可以杀死并忽略它的脚本。

谢谢!

最佳答案

正如其他海报所暗示的那样,在单独的进程中托管可能更容易。更轻量级的方法是托管在单独的应用程序域中并使用 app-domain resource monitoring api来监控内存使用情况。

关于c# - 在.NET 中快速检查或限制线程内存使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6487400/

相关文章:

python-3.x - 用线程运行 pytest

c - 如何为多个函数中的结构成员设置特定值?

c - 加载库需要随机化内存地址是什么?

c - 同一内存位置上的结构和数组声明

c# - 在队列的两次消息读取之间创建延迟?

c# - 不能明确指定标识列,但也不能不指定

c# - 获取显示受影响的方法(名称)的代码文件版本差异

c# - Base64反序列化过程中的空引用异常(C#)

c++ - openssl BF_cfb64_encrypt 线程安全

java - 设置方法/线程的最大执行时间