【发布时间】:2012-01-23 17:41:06
【问题描述】:
今天我的应用程序抛出了OutOfMemoryException。对我来说,这几乎总是不可能的,因为我也有 4GB RAM 和大量虚拟内存。当我尝试将现有集合添加到新列表时发生错误。
List<Vehicle> vList = new List<Vehicle>(selectedVehicles);
据我了解,这里分配的内存不多,因为我的新列表应该包含的车辆已经存在于内存中。我不得不承认Vehicle 是一个非常复杂的类,我试图一次将大约 50.000 个项目添加到新列表中。但是由于应用程序中的所有Vehicles 都来自一个只有 200MB 大小的数据库,所以我现在不知道是什么导致了OutOfMemoryException。
【问题讨论】:
-
selectedVehicles的值(和类型)是什么? -
当
OutOfMemoryException被抛出时,您是否使用调试器附加到进程并查看问题可能是什么?对象有多大? .NET Framework 的对象大小硬限制为 2 GB,减去框架本身消耗的开销。 -
Vehicle 可能是一个结构体而不是一个类吗?
-
200MB 的数据库空间在转换为 .net 对象时可能很容易占用两倍以上的空间。之后,它的占用空间可能会更小,但框架会尝试一次获取一大块不可用的连续内存。
-
您关于您拥有多少内存以及您允许系统拥有多少虚拟内存的声明表明缺乏对虚拟内存和物理内存如何工作的理解。您可能想阅读有关该主题的一些信息。
标签: c# .net out-of-memory