限制C#程序使用的最大内存

2024-03-31

我需要限制 C# 程序使用的最大内存,即进行安排,以便如果其内存消耗超过一定限制,它将立即崩溃,而不是继续向操作系统请求更多内存。

(代码已经正确且高效,但内存消耗在运行时根据输入数据的不同而变化不可预测。某些输入数据集仅使用几兆字节后就可以正确得出结论。另一些输入数据集会导致它使用许多兆字节。在实践中,这意味着当虚拟内存系统疯狂地尝试满足请求时,它将使整个机器停止运行,然后崩溃。我希望程序立即崩溃,而不需要经历“使整个机器停止运行”部分。 )

它在 64 位 Windows 上运行;在大多数情况下,该限制实际上应为数十 GB,但以下测试用例尝试分配 1 GB;我试图让它崩溃而不是满足这个请求。

C:\t>type a.cs
using System;

class a
{
    static void Main(string[] args)
    {
                var a = new byte[1024*1024*1024];
                a[0] = 5;
                Console.WriteLine(a[0]);
    }
}

C:\t>csc a.cs
Microsoft (R) Visual C# Compiler version 3.5.0-beta4-20153-05 (20b9af91)
Copyright (C) Microsoft Corporation. All rights reserved.

https://learn.microsoft.com/en-us/dotnet/core/run-time-config/garbage-collector https://learn.microsoft.com/en-us/dotnet/core/run-time-config/garbage-collector表明实际上有一种方法可以将其设置为运行时参数,方法是在名为的文件中指定它runtimeconfig.json。文档的某些部分建议文件名需要以程序名作为前缀,而有些则不需要;我正在尝试两种方法。

C:\t>type runtimeconfig.json
{
   "runtimeOptions": {
      "configProperties": {
         "System.GC.HeapHardLimit": 209715200
      }
   }
}

C:\t>type a.runtimeconfig.json
{
   "runtimeOptions": {
      "configProperties": {
         "System.GC.HeapHardLimit": 209715200
      }
   }
}

该文档还建议这可以通过设置环境变量来完成。

C:\t>set DOTNET_GCHeapHardLimit=C800000

但以上都没有任何效果。

C:\t>a
5

我是否缺少有关如何使用上述内容的信息?或者有其他方法来限制最大内存使用量吗?


查看我在 VS2022 中创建的一个名为 Mime.exe 的早期 .NET 6 控制台项目,在构建过程中,它会在输出目录中创建一个 Mime.runtimeconfig.json 文件。所以肯定要以可执行文件的名称作为前缀。作为参考,这是具有工作堆限制的内容:

{
  "runtimeOptions": {
    "tfm": "net6.0",
    "framework": {
      "name": "Microsoft.NETCore.App",
      "version": "6.0.0"
    },
    "configProperties": {
      "System.Reflection.Metadata.MetadataUpdater.IsSupported": false,
      "System.GC.HeapHardLimit": 1000000
    }
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

限制C#程序使用的最大内存 的相关文章

随机推荐

  • 在 Jasper 报表上的表中显示 JSON 数组

    我正在尝试使用由 JAVA 函数传递的 JSONDatasource 创建 JasperReport 这是我发送给 jasper 的 JSON Person FirstName John LastName Smith Contacts Ty
  • XML、命名空间和 E4X

    有人可以解释一下 XML 中的命名空间 xmlns 到底有什么用 以及如何使用它们在使用 E4X 导航 XML 时使用它们 最好在 ActionScript 3 中 我无法完全理解它们的目的和用途 理论上 XML命名空间是用来避免与标签名称
  • 如何在tensorflow v2中启用cuda统一内存

    In tensorflow1 x 有一个选项 例如use unified memory and per process gpu memory fraction这有可能触发 CUDA UVM 的使用 但这怎么能在tensorflow 2 0
  • 使用 Moq 重写同一类中的虚拟方法

    我们正在使用 Moq 来对我们的服务类进行单元测试 但仍停留在如何测试服务方法调用同一类的另一个服务方法的情况 我尝试将被调用的方法设置为虚拟 但仍然不知道在最小起订量中要做什么 例如 public class RenewalService
  • 如何创建一个 Grid,其 X 轴和 Y 轴绑定到不同的集合?

    我需要显示一些内容 其中沿列显示一周的天数 沿行显示类别列表 以及单元格中到期的任务列表 参见下面的草图 我觉得解决方案应该很简单 但对于如何绑定这样的东西我还是一片空白 单元格中的行 列和数据项都是动态的 具体取决于用户正在查看的周 理想
  • 无法转换 COM 对象 - Microsoft Outlook 和 C#

    我编写了这段代码来查看 Outlook 邮箱中的未读邮件 代码如下 Microsoft Office Interop Outlook Application app Microsoft Office Interop Outlook Item
  • 上传压缩图片

    我是安卓新手 我创建了一个应用程序来将图像上传到服务器 它非常适合小尺寸图像 但对于较大图像 gt 1 MB 这不起作用 这是我上传图片的功能 class UploadFile extends AsyncTask
  • 在android studio 0.2.8中导入外部库

    我试图将外部库导入到 android studio 中的 android 项目中 这里的许多答案都说它可以从设置中的项目结构中的模块完成 但是自 0 2 8 更新以来 项目结构中没有库 模块 我现在如何导入外部库 也许这是 0 2 8 更新
  • 将数据获取到复杂性:未调用 ExtensionDelegate

    看起来前几周其他人也遇到过这个问题 但我还没有找到任何解决方案 我正在尝试做一件非常基本的事情 将数据从我的 iOS 应用程序或我的 Watch 应用程序获取到我的复杂功能控制器 事实证明 我完成这件事的能力比我想象的要差得多 watchO
  • pub get 错误:无法创建链接...(操作系统错误:函数不正确)

    我在尝试获取 Angular dart Codelab 的包时遇到错误 10 01 28 Running pub get Pub get failed 1 Resolving dependencies Cannot create link
  • Flyway 在空模式上发现非空模式

    我正在尝试实施数据库迁移Flyway 4 2 0 Oracle 11g 我有这个空架构 当我尝试迁移时 Flyway 说 造成原因 org flywaydb core api FlywayException 发现非空 模式 PASHA 没有
  • 具有 CSS 变量的 SVG 半径或位置

    是否可以在 SVG 中使用 CSS 变量来操作 中的半径或位置 等值属性样式 一个元素 例如 在下面的代码中 我添加了一个 CSS 颜色变量 dark text clr和一个半径变量 radius 当我使用填充中的颜色 CSS 变量 htt
  • JavaFX HBox 对齐

    我一直在使用 JavaFX 开发一个软件 但我遇到了一个愚蠢但令人担忧的问题 在代码的某些部分我有一个HBox 并且 其中包含三项 image a label and a VBox 问题是我想要image向左对齐 即紧挨着左边距window
  • 无法在 mac osx 10.10 上构建 python gevent

    概要 pip install gevent不起作用 深入挖掘 我下载了gevent tar gz并手动运行构建 python setup py build 得到同样的错误 running build running build py run
  • 存储没有大小的字符串文字数组 - 关于数组大小的简单模板

    我正在探索存储没有 sidecar 大小信息的文字数组 任何类型 的方法 我已经概述了一些方法 但每种方法都有一些挥之不去的问题 这是最简单的方法 模板超过数组大小 请注意 这是一个简单的测试用例 实际的类可能具有其他成员 其他模板参数以及
  • 使用 XadES-BES 算法通过 XMLDSIG 进行 XML 验证

    程序使用的某些信息使用 xml 格式的输入文件 这些文件具有以下结构
  • 从 Word VBA 编辑工作簿(无论打开还是关闭)

    我正在尝试在 Word 中编写宏 以便可以将一些信息保存到计算机其他位置的 Excel 文件中 为此我写了这个 Dim exlApp As Object Dim exlWbk As Object Set exlApp CreateObjec
  • 如何使 TextView 的内容可水平和垂直滚动

    我想滚动在 TextView 中查看的结果 这是我的 xml
  • 即使在 java 8 中,SecureRandom 的创建也很慢

    我搜索了这个问题 我的印象是 它在 java 8 中得到了解决 但是突然间 我开始在基于 ubuntu 14 04 的新虚拟机中遇到这个问题 2015 07 27 14 56 35 324 INFO 11809 localhost star
  • 限制C#程序使用的最大内存

    我需要限制 C 程序使用的最大内存 即进行安排 以便如果其内存消耗超过一定限制 它将立即崩溃 而不是继续向操作系统请求更多内存 代码已经正确且高效 但内存消耗在运行时根据输入数据的不同而变化不可预测 某些输入数据集仅使用几兆字节后就可以正确