如何使用更多的RAM?

6
我需要强制使用动态RAM的终端服务器为我的.NET应用程序提供更多的RAM,从而减少.NET GC RAM压力并提高性能。对于我使用X86作为目标编译的大型Microsoft .NET C# WinForms应用程序,是否有垃圾收集器或其他.NET Framework设置可用于允许我的应用程序使用更多的RAM以增加性能,而不是让.NET垃圾收集器试图紧密控制RAM压力?我希望有一些.NET GC提示、设置或.NET框架函数调用来调整它运行的方式。
原因:我的应用程序每个工作日被数万名用户在数千台终端服务器上使用。在15年的部署期间,我发现每个实例提供约1.85GB的RAM时,应用程序将表现得足够好。
我们已经做了大量的开发工作,以确保最小的RAM使用和内存泄漏得到控制。(例如:使用(){ },在可能的每个对象上调用Dispose等)
然而,这是一个巨大的应用程序,几乎完成客户业务操作的所有任务,包括一些图形和更多的内容,我预计会使用大量的RAM。
我不能改变到64位,直到我们删除旧的第三方GUI控件,这将需要数月的开发,并且管理层不会让我安排这个,因为它不会提供任何直接的最终用户升级。(除了整体更好的性能...)
问题在于说服客户的IT公司托管终端服务器添加所需的RAM以保持性能。他们通常的论点是虚拟机没有报告重量级的RAM使用情况,这立即意味着我需要花费数天的时间来说服他们在这种情况下不是最佳指标。
另外对于使用动态RAM的服务器,如果不正确增加操作系统的RAM,则应用程序的性能会降低。
我的目标是调整一些设置以允许更多的RAM使用(而不是使用不必要/虚假的内存消耗),并推动这些服务器根据需要分配更多的RAM。

你不能使用超过电脑内存的空间。当你使用比电脑实际内存更多的空间时,Windows会使用硬盘来交换内存(缓存),但使用交换会显著减慢应用程序的速度。我建议使用控制面板查看正在使用的缓存量。 - jdweng
这并不是因为.NET GC将内存占用保持在可用RAM的约40%,所以IT说“您没有使用RAM”。只有在向主机添加更多RAM时,.NET GC才会打开,使用更多RAM,应用程序性能更好。我想默认情况下更接近100%的使用率。 - Moon
你可以尝试在这里提出的解决方案:https://stackoverflow.com/questions/1075542/configure-net-clr-ram-usage,但我个人认为你运气不太好。也许将该设置设置为2GB或其他值会导致操作系统尝试使用更多的RAM,进而分配该RAM的VM管理服务。但是,除非VM真的没有剩余RAM,否则为什么会扩展以使您拥有更多RAM?为什么Windows允许您将CLR的RAM使用量设置为高于其自身认为拥有的RAM的值? - evanmcdonnal
1
终端服务器也是x86架构的吗? - Seabizkit
1
如果终端服务器是x64,您可以将应用程序分成许多x64服务,同时保持应用程序在x86上。另一个选择是使用存储缓存,可以选择存储在SSD、HDD或英特尔的Optane内存上。 - NagyDani
显示剩余4条评论
1个回答

14
但是.NET GC会使内存使用率保持在可用RAM的约40%左右。
这个问题和它的评论中存在几个误解,其中一个核心误解是GC和CLR完全不知道RAM,就像运行在现代需求分页虚拟内存操作系统上的任何程序一样。 "虚拟"是一个关键词,操作系统创建了一个假象,即进程可以访问处理器提供的所有地址空间。32位进程为2GB,64位进程为数千兆字节。
“需求分页”是另一个关键词,操作系统以页面为单位向进程提供RAM,每次4096字节。按需而非在分配时提供,而是当进程从地址读取或写入时。分页文件是关键的操作系统资源,当没有足够的RAM可用时,内存内容存储在那里。当操作系统需要为其他进程提供RAM页面时,RAM内容被分页出去。由页面错误按需重新分页回来。
在RAM较低的机器上,这些页面错误可能经常发生,并且可以明显地减慢程序的速度。在任务管理器中可见,您可以添加“PF Delta”列。其他相关列是“工作集”,即程序正在积极使用的RAM量。和“提交大小”,即由分页文件支持的所有分配的总和。 .NET程序在分配内存时会增加提交大小。
操作系统会主动寻找一段时间内未使用的RAM页面并将其换出。这是为了能够快速响应其他进程对内存需求的重要性。如果您的程序是机器上唯一运行的,则这样做不是特别理想。可以进行调整,请查看此MSDN页面以获取策略。对于终端服务器是否适用,我不确定,我认为可能性不大,建议在serverfault.com上咨询专家。
在编程中,您可以更改Process.MinWorkingSet属性,但请记住,当操作系统认为可用RAM量过低时,它可能会忽略它。而且,您可能会导致服务器上的其他进程明显变慢,从而使管理员不满意。这也是值得向每天在serverfault.com上处理这些问题的专家咨询的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接