在阅读了一些有关.NET技术内存的启发性文章后,Out of Memory并未引用物理内存,597499.
我以为我理解为什么C#应用程序会抛出一个内存不足的异常 - 直到我开始尝试使用两台服务器 - 两者都有2.5 GB的ram,windows server 2003和相同的程序运行.
两者之间唯一显着的区别是剩下7%的硬盘存储空间而另一个存在超过50%.
剩下7%存储空间的服务器一直在内存不足,而另一个服务器一直表现良好.
我的应用程序是一个C#Web应用程序,它处理'数百MB的String对象.
为什么这种差异会发生,因为内存不足问题的最可能原因是连续的虚拟地址空间.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace testes
{
class Program
{
static void Main(string[] args)
{
Int64[] a = new Int64[300000000];
a[0] = 10;
}
}
}
Run Code Online (Sandbox Code Playgroud)
运行此代码后,我收到一个System.OutOfMemoryException但我的计算机有8千兆ram免费.请你帮助我好吗?
我是C#的初学者.我已经将编译目标cpu更改为x64,认为只有这个就足够了.谢谢吕克
好的,所以我有一个非常大的多线程非托管c ++应用程序(服务器),它运行在Windows 2003服务器上.它为20-50个并发用户提供各种业务逻辑的会话...有时,由于用户在客户端打开了大量窗口等对象/会话缓存之类的东西,它可能会占用大量内存(每个窗口都有一个单独的服务器'会话'.
我们经常看到消耗超过5-600 MB的物理内存和5-600 MB的虚拟内存.一旦达到这一点,我们似乎开始出现"内存不足"错误.
现在我知道Windows会在感觉需要释放物理内存时启动页面错误,而且win32应用程序通常只能分配最多4GB的内存,实际上只有2GB可用于应用程序实际使用'用户模式'地址空间,甚至更少的其他库加载后......我不确定'用户模式'内存使用情况是否是任务管理器上报告的内容. ..
所以无论如何我真正的问题是:
我如何知道我的应用程序可以访问多少用户模式内存,以及在任何给定时间(最好是从应用程序外部,即某些Windows管理工具)使用了多少内存?
[edit]在查看Process Explorer和网站之后,看起来值'Virtual Size'是应用程序可以访问多少内存的值.
我有一个2D阵列a[3,3].如何将一个维度表示为一个新数组并将其传递给某个函数?
int[,] a = new int[3,3];
a[0,0] = 1;
...
string b = concatenate(a[0]); // where concatenate is a function
// take a one dimension array as param
Run Code Online (Sandbox Code Playgroud)
另外,我可以使用C#创建65000x65000阵列吗?我得到了一些"内存不足"的错误.
我应该如何制作一个可以容纳这个范围的列表(在代码中),因为它显示内存异常?
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var l1 = Enumerable.Range(999900000, 1000000000).ToList();
l1.ForEach(f => Console.WriteLine(f));
}
}
}
Run Code Online (Sandbox Code Playgroud)