今天,我的申请今天抛出了OutOfMemoryException。对我来说,这几乎几乎是不可能的,因为我也有4GB RAM和很多虚拟内存。当我尝试将现有集合添加到新列表时发生了错误。List<Vehicle> vList = new List<Vehicle>(selectedVehicles); 据我了解,这里没有分配多少内存,因为我的新列表中应该包含的车辆已经存在于内存中。我不得不承认这Vehicle是一个非常复杂的类,我试图一次将大约50.000个项目添加到新列表中。但是,由于Vehicle应用程序中的所有s都来自大小仅为200MB的数据库:目前,我不知道可能会导致什么OutOfMemoryException。
3 回答
繁花如伊
TA贡献2012条经验 获得超12个赞
两点:
如果您运行的是32位Windows,则将无法访问所有4GB内存,而只能访问2GB。
不要忘记的底层实现
List
是一个数组。如果您的内存非常分散,则List
即使您总共有足够的可用内存,也可能没有足够的连续空间来分配您的。
斯蒂芬大帝
TA贡献1827条经验 获得超8个赞
3岁的主题,但我找到了另一个可行的解决方案。如果您确定有足够的可用内存,正在运行64位操作系统并且仍然出现异常,请转到Project properties
-> Build
选项卡,并确保将其设置x64
为Platform target
。
慕斯709654
TA贡献1840条经验 获得超5个赞
.Net4.5对对象不再有2GB的限制。将此行添加到App.config
<runtime>
<gcAllowVeryLargeObjects enabled="true" />
</runtime>
并且可以创建非常大的对象而不会出现OutOfMemoryException
请注意,它仅适用于x64 OS!
- 3 回答
- 0 关注
- 785 浏览
添加回答
举报
0/150
提交
取消