Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows Server 2012上.NET应用程序的RAM使用限制?_C#_.net_Virtual Memory_Windows Server 2012 - Fatal编程技术网

C# Windows Server 2012上.NET应用程序的RAM使用限制?

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限制,但是 我错过什么了吗 我还研究了代码中可能存在的任何潜在原因,但我不清楚 确定是

我目前遇到一个问题,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定义为:

public MyClass
{
    string a;
    string b;
    string c;
    Dictionary<string> subDict;
}
公共MyClass
{
字符串a;
b串;
字符串c;
字典子目录;
}
我是否可以使用多个词典,每个词典中都包含一个词典 造成内存限制?

这不是“为什么服务器要交换”的问题,而是“为什么我的应用程序占用了这么多内存?”

强烈建议:

下载Microsoft CLR探查器:

对于您最初的问题“即使服务器应该有足够的空闲RAM,但为什么要使用swap?”——可能有很多原因。您需要具有对服务器的管理访问权限才能准确确定发生了什么。这些链接可能有助于:


  • 单个.NET对象的限制为2GB(除了.NET 4.5中某些数组的可配置例外),字典是否符合此定义?如果尝试创建大于2GB的对象,则会出现OutOfMemoryException。如果启用此设置,NET4.5支持更大的对象。这在Windows中是一个非常常见的误解。进程从不开始使用虚拟内存,它从开始运行时就使用VM。它们使用多少RAM完全取决于操作系统的选择以及它们导致页面错误的频率,这些错误会将虚拟内存页面映射到RAM。进一步区分了.NET程序完全正常的软页面错误和硬页面错误,这是您必须担心的。你需要对你认为你的应用程序有什么问题提供更好的诊断。至少使用内存分析器来获得洞察力。感谢工具链接。在仔细检查之后,我发现有一些实例是一个字典被用来存储大量数据。看起来我可以通过在多个字典中划分数据来解决这个问题。投票将此作为答案,因为该工具非常有用。