我需要限制C#程序使用的最大内存,即安排当其内存使用量超过一定限制时,立即崩溃而不是继续向操作系统请求更多内存。
(代码已经正确和高效,但内存消耗在运行时根据输入数据的不确定性变化。有些输入数据集只使用了几兆字节就正确地结束了,而其他一些数据集会导致它使用数万兆字节。实际上,这意味着它将会使整个机器停止运转,因为虚拟内存系统试图疯狂地满足请求,然后崩溃。我希望程序立即崩溃,而不是经历整个机器停止运转的部分。)
这是在64位Windows上运行的; 在大多数情况下,限制应该在数十GB范围内,但以下测试用例尝试分配1GB;我正在尝试让它崩溃,而不是满足此请求。
文档还建议可以通过设置环境变量来完成此操作。
但以上任何一项都没有任何效果。
有关如何使用上述内容,我是否遗漏了某些内容?或者还有其他方式来限制最大内存使用量吗?
(代码已经正确和高效,但内存消耗在运行时根据输入数据的不确定性变化。有些输入数据集只使用了几兆字节就正确地结束了,而其他一些数据集会导致它使用数万兆字节。实际上,这意味着它将会使整个机器停止运转,因为虚拟内存系统试图疯狂地满足请求,然后崩溃。我希望程序立即崩溃,而不是经历整个机器停止运转的部分。)
这是在64位Windows上运行的; 在大多数情况下,限制应该在数十GB范围内,但以下测试用例尝试分配1GB;我正在尝试让它崩溃,而不是满足此请求。
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提供了一种在运行时设置参数的方法,即通过在名为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
有关如何使用上述内容,我是否遗漏了某些内容?或者还有其他方式来限制最大内存使用量吗?