有没有办法告诉Windows为程序提供更多内存?我宁愿这样做,而不是重新编写一个简单的程序,否则它运行良好。我们可以为获取OutOfMemoryException的程序分配更多内存
我们有一个C#程序,每15分钟运行一次,并将新传入文件与前一个文件进行比较。新旧文件都是“|”分离并读入内存。我们还没有尝试优化,只是将所有内容都读入字典并进行直接比较。
我们收到此错误,
Message: Exception of type 'System.OutOfMemoryException' was thrown. at
System.String.SplitInternal(Char[] separator, Int32 count,
StringSplitOptions options)
at System.String.Split(Char[] separator)
每个文件都有约1000线,每条线都有base64编码的大图像作为竖线分隔的领域之一。每行可以是500K-700K,因此每个文件的总大小约为600MB。也许偶尔会超过1MB。
我们估计该程序使用1.5GB左右的RAM。我想给它更多的RAM而不是试图优化代码。或者,如果整个程序运行内存不足,或者某个特定的巨大行可能会导致SplitInternal引发此异常,将会很好。
Windows Server 2012R2。
编辑:有问题的代码行只是“string [] data = info.Split('|');”在一个循环内。在发现这个异常之后,程序继续并处理很多其他行。
不反对重写它,但如果有更简单的方法,我想先尝试一下。我们确认它是用“Prefer 32 bit”复选框编译的,所以首先我们将尝试取消选中并查看会发生什么。毕竟,2GB现在在服务器上并不是很多...
你有内存泄漏。添加更多的内存不是解决方案,而是检查你的应用程序代码中的哪个部分泄漏了它 – Rahul
你应该真的将代码更改为内存中不需要1.5 GB字符串的代码。除了OOM之外,异常通常意味着与物理内存不同的东西,例如32位进程中的地址或碎片,或者...... – Console
'或者,如果程序整体运行内存不足或一个特定的巨大行可能会导致SplitInternal抛出此异常.'另一个值得了解的好事可能是您正在运行的代码... – mjwills