C# Windows Server 2012上.NET应用程序的RAM使用限制?
我目前遇到一个问题,C#应用程序使用.NET framework v4.0 一旦在运行的256 GB RAM服务器上使用16 GB的RAM,就开始使用虚拟内存 Windows Server 2012 其他一些信息: 该程序是使用Visual Studio 2012 Professional Edition在Windows 7 Professional(64位二进制)上编译的 我不知道在这个环境中会出现什么RAM限制,但是 我错过什么了吗 我还研究了代码中可能存在的任何潜在原因,但我不清楚 确定是什么导致了问题。该程序使用多个字典实例。 每个字典都包含MyClass数据作为其值,其中MyClass定义为:C# Windows Server 2012上.NET应用程序的RAM使用限制?,c#,.net,virtual-memory,windows-server-2012,C#,.net,Virtual Memory,Windows Server 2012,我目前遇到一个问题,C#应用程序使用.NET framework v4.0 一旦在运行的256 GB RAM服务器上使用16 GB的RAM,就开始使用虚拟内存 Windows Server 2012 其他一些信息: 该程序是使用Visual Studio 2012 Professional Edition在Windows 7 Professional(64位二进制)上编译的 我不知道在这个环境中会出现什么RAM限制,但是 我错过什么了吗 我还研究了代码中可能存在的任何潜在原因,但我不清楚 确定是
public MyClass
{
string a;
string b;
string c;
Dictionary<string> subDict;
}
公共MyClass
{
字符串a;
b串;
字符串c;
字典子目录;
}
我是否可以使用多个词典,每个词典中都包含一个词典
造成内存限制?这不是“为什么服务器要交换”的问题,而是“为什么我的应用程序占用了这么多内存?”
强烈建议:
下载Microsoft CLR探查器:
-
单个.NET对象的限制为2GB(除了.NET 4.5中某些数组的可配置例外),字典是否符合此定义?如果尝试创建大于2GB的对象,则会出现OutOfMemoryException。如果启用此设置,NET4.5支持更大的对象。这在Windows中是一个非常常见的误解。进程从不开始使用虚拟内存,它从开始运行时就使用VM。它们使用多少RAM完全取决于操作系统的选择以及它们导致页面错误的频率,这些错误会将虚拟内存页面映射到RAM。进一步区分了.NET程序完全正常的软页面错误和硬页面错误,这是您必须担心的。你需要对你认为你的应用程序有什么问题提供更好的诊断。至少使用内存分析器来获得洞察力。感谢工具链接。在仔细检查之后,我发现有一些实例是一个字典被用来存储大量数据。看起来我可以通过在多个字典中划分数据来解决这个问题。投票将此作为答案,因为该工具非常有用。