【发布时间】:2018-03-26 14:32:02
【问题描述】:
基本上我有一个 C# 程序,在运行它时我想指定它可以访问的最大内存量。如果在执行的任何时候,我的应用程序超过了阈值,我想以适当的异常终止它。内存限制可以低至 100Mb。
我看到了.Net close application 的问题,但答案是反复检查PrivateMemorySize。但是我的程序很大,内存可以跨越阈值的位置很多。
我的想法是,在 Visual Studio 中,资源监视器以某种方式跟踪内存使用情况,而我只需要一个阈值和一个标志来终止应用程序。
这一壮举也是在nodejs 中使用set NODE_OPTIONS="--max-old-space-size=value 实现的
【问题讨论】:
-
您可以对您的应用程序进行 docker 化。然后you could set the containers max memory
-
理解虚拟内存和 RAM 之间的区别非常重要。您只分配虚拟内存,由操作系统为其查找 RAM。当另一个进程需要一些 RAM 时,它也可以轻松地拿走 RAM。您可以分配 Process.GetCurrentProcess().MaxWorkingSet 属性,但唯一能做的就是让您的程序变慢。
-
这意味着你想让虚拟内存大小= 100MB?
-
放慢我的应用程序是我最不想做的事情。
-
如果没有 Docker 容器,Win32 job objects 是另一种选择,但它们没有本机托管支持,因此需要一些 P/Invoking。 Docker 容器有更好的工具。
标签: c# memory-management out-of-memory virtual-memory