我在VB.NET中运行程序,使用VS 2013,采用64位架构,并启用了allowverylargeobjects。
我有一个类的对象列表。该类具有各种属性,即数据,类似
Class cMyClass
Property desc1 as String
Property desc2 as String
Property value as Double
End Class
我通过从SQL服务器读取来填充此列表。我可以在调试或释放模式下成功地在列表中放置这个类的1亿个对象,并对它们进行操作就好了。但有一次,我在列表中填充了1.5亿个对象。当我在调试模式下(或者甚至在发布模式下,但通过VS)通过Visual Studio运行程序时,我没有问题用1.5亿个对象填充列表。但是当我使用一个可执行文件(从发布模式编译)时,它会抛出一个错误(错误框告诉我它在一个特定的子程序中,唯一发生的事情就是填充这个列表) - " exceededSystem .OutOfMemoryException:数组维度超出了支持的范围。"
我认为将这么多内容加载到内存中是不好的做法,但我已经走了很远的路,只需要解决一次。通过VS运行程序,我可以清楚地解决它,但是想了解为什么这在VS(在调试模式或发布模式下)适用于我,但在运行可执行文件时却不行。
我补充一点,我不认为这是一个硬件问题。该程序在运行时使用超过20GB的内存,但它运行在128GB RAM的盒子上。
谢谢。
答案 0 :(得分:0)
在exe.config文件(https://docs.microsoft.com/en-us/dotnet/framework/configure-apps/file-schema/runtime/gcallowverylargeobjects-element)中启用gcAllowVeryLargeObjects
即使处于活动状态,元素数量仍然受到限制:
请注意,正如Tycobb的评论所述,gcAllowVeryLargeObjects在对象级别而不是在进程级别工作-因此您的进程可能使用20 gb的RAM,这些RAM由许多<2 GB的对象之和构成。>