gpt4 book ai didi

.net - CLR内存消耗问题

转载 作者:行者123 更新时间:2023-12-02 15:08:50 24 4
gpt4 key购买 nike

CLR 的问题之一是它在缺乏 RAM 时表现出极其糟糕的行为(当托管进程的一些内存被调出时,这会导致整个系统完全卡住,甚至 Ctrl-Alt-Del 屏幕也无法运行)无法访问。我认为原因是 GC 尝试构建可到达对象的图表并尝试扫描进程的所有内存,从而导致大量页入/页出操作。
这给我的 .NET 程序带来了一个问题,因为当输入数据很大时它会消耗大量 RAM。

我更愿意向用户显示“内存不足”消息,而不是完全挂起他的系统^_^
有什么办法可以实现这一点吗?

最佳答案

MemoryFailPoint ,您可以告诉 .NET 您将需要一定量的内存。 但问题是,即使这个系统也包含交换空间。

我相信在这里实现你想要实现的目标是非常困难的。比如说,您将使用一些系统指示器和性能指示器来找出有多少物理内存可用,并基于此执行一些任务。如果完成此检查后,另一个进程进入了物理内存,则您原来的计算不再适用,并且您的一些内存将被推送到交换区。

我确实有一个建议。您可以设置一个配置设置,其中包含应用程序允许使用的最大内存量吗?有了这个,您可以:

  1. 尝试根据例如,计算出您的应用程序消耗了多少资源。网络连接(如果您的应用程序是网络服务器)并根据最大内存消耗限制连接数,或者

  2. 您可以运行第二个线程,每隔 10 秒或每分钟检查一次 GC.GetTotalMemory() 的总内存消耗,并开始拒绝连接(同样,如果您的应用程序是网络服务器)一旦达到该最大值。

这应该是一个配置设置,而不是例如可用物理内存量,因为您不知道计算机上正在运行哪些其他应用程序。

关于.net - CLR内存消耗问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4145052/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com