Don*_*Don 5 .net c# memory performance garbage-collection
我需要使用动态RAM强制终端服务器为我的精简运行.NET应用程序提供更多RAM,从而减少.NET GC RAM压力并提高性能.
对于使用X86作为目标编译的大型Microsoft .NET C#WinForms应用程序,是否有垃圾收集器或其他.NET Framework设置可用于允许我的应用程序使用更多RAM来提高性能,而不是让.NET垃圾收集器试图保持RAM控制如此紧张?
我希望有一些.NET GC提示,设置或.NET框架函数调用来调整它运行的精简程度.
原因: 我的应用程序在其工作时间内的每个工作日被数千个终端服务器上的数万个用户使用.在15年的部署期间,我发现当每个实例提供大约1.85GB的RAM时,应用程序将充分运行.
我们已经进行了重大的开发,以确保最小的RAM使用率和内存泄漏得到控制.(IE:Using(){},在每个对象上调用Dispose等等)
然而,这是一个巨大的应用程序,几乎完成了客户业务操作的所有任务,包括一些图形和更多,我期望大量的RAM使用.
在我们删除旧的第三方GUI控件之前,我无法更改为64位,这将需要数月的开发和管理不会让我安排,因为它不会提供任何直接的最终用户升级.(除了总体上更好的表现....)
问题在于说服主机终端服务器的客户的IT公司添加所需的RAM以保持性能.他们的典型论点是,虚拟机不会报告大量的RAM使用情况,这就意味着我需要花费几天的时间来说服他们,这不是在这种情况下使用的最佳指标.
此外,对于使用动态RAM的服务器,可以降低应用程序性能,而无需正确增加OS RAM.
我的目标是调整一些设置以允许更多的RAM使用(不使用不需要/假的内存消耗)并推动这些服务器根据需要分配更多的RAM.
Han*_*ant 11
但是.NET GC将内存使用率保持在可用RAM的40%左右
在这个问题及其评论中存在一些误解,这是一个核心问题.GC和CLR完全忘记了RAM,就像在现代需求页面虚拟内存操作系统上运行的任何程序一样."虚拟"是一个关键术语,操作系统会产生一种错觉,即进程可以访问处理器可以提供的所有地址空间.对于32位进程,2GB,对于64位进程,为2TB.
"需求分页"是另一个关键术语,OS为具有页面单位的进程提供RAM,一次4096个字节.按需,不是在分配时,而是在进程从地址读取或写入时.页面文件是一个关键的OS资源,即在没有足够的RAM可用时存储内存的地方.当操作系统需要为其他进程提供RAM页面时,RAM内容被分页.通过页面错误按需分页.
在RAM量较少的计算机上,这些页面错误可能经常发生,并且可能会显着减慢程序速度.在任务管理器中可见,您可以为"PF Delta"添加一列.其他相关的列是"工作集",即程序正在使用的RAM量.和"提交大小",页面文件支持的所有分配的总和..NET程序在分配内存时会增加提交大小.
操作系统主动查找暂时未使用的RAM页面并将其分页.重要的是它可以快速响应其他进程的内存需求.如果你的程序是机器上唯一运行的程序,那么这不是很理想.可以调整,检查此MSDN页面的策略.对于终端服务器来说这是不是一个好主意对我来说并不明显,我不会给它很大的机会,serverfault.com是最好的问题.
以编程方式,您可以修改Process.MinWorkingSet属性,但请记住,当OS认为可用RAM的数量太低时,操作系统可能会忽略它.并且您可能会导致服务器上的其他进程放慢速度,从而使管理员感到不安.还有一些东西可以让每天在serverfault.com上执行此操作的专家反弹
| 归档时间: |
|
| 查看次数: |
820 次 |
| 最近记录: |