【问题标题】:How to run a C# program with virtual memory usage constraints如何运行具有虚拟内存使用限制的 C# 程序
【发布时间】: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


【解决方案1】:

我发现的一个解决方法是打包我的应用程序并在安装了mono 的Linux 机器上运行它,在ulimit 的帮助下,我可以轻松设置虚拟内存限制。

例如,我可以做类似的事情,

ulimit -v 200000; mono myapplication.exe

设置的值以 KB

为单位

【讨论】:

    猜你喜欢
    • 2014-12-16
    • 1970-01-01
    • 2017-09-12
    • 2012-12-16
    • 2014-03-12
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 2011-07-13
    相关资源
    最近更新 更多