猿问

C#:内存不足异常

今天,我的申请今天抛出了OutOfMemoryException。对我来说,这几乎几乎是不可能的,因为我也有4GB RAM和很多虚拟内存。当我尝试将现有集合添加到新列表时发生了错误。


List<Vehicle> vList = new List<Vehicle>(selectedVehicles);  

据我了解,这里没有分配多少内存,因为我的新列表中应该包含的车辆已经存在于内存中。我不得不承认这Vehicle是一个非常复杂的类,我试图一次将大约50.000个项目添加到新列表中。但是,由于Vehicle应用程序中的所有s都来自大小仅为200MB的数据库:目前,我不知道可能会导致什么OutOfMemoryException。


DIEA
浏览 786回答 3
3回答

繁花如伊

两点:如果您运行的是32位Windows,则将无法访问所有4GB内存,而只能访问2GB。不要忘记的底层实现List是一个数组。如果您的内存非常分散,则List即使您总共有足够的可用内存,也可能没有足够的连续空间来分配您的。

斯蒂芬大帝

3岁的主题,但我找到了另一个可行的解决方案。如果您确定有足够的可用内存,正在运行64位操作系统并且仍然出现异常,请转到Project properties->&nbsp;Build选项卡,并确保将其设置x64为Platform target。

慕斯709654

.Net4.5对对象不再有2GB的限制。将此行添加到App.config<runtime>&nbsp; &nbsp; <gcAllowVeryLargeObjects enabled="true" />&nbsp; &nbsp;&nbsp;</runtime>并且可以创建非常大的对象而不会出现OutOfMemoryException请注意,它仅适用于x64 OS!
随时随地看视频慕课网APP
我要回答