今天,我的应用程序抛出了一个OutOfMemoryException
。对我来说,这几乎是不可能的,因为我有4 4GB的RAM和大量的虚拟内存。当我试图将现有的集合添加到新的列表中时,出现了错误。
List<Vehicle> vList = new List<Vehicle>(selectedVehicles);
据我所知,这里分配的内存不多,因为我的新列表中应该包含的车辆已经存在于内存中。我不得不承认Vehicle
是一个非常复杂的类,我试图一次向新列表中添加大约50.000个条目。但是由于应用程序中的所有Vehicle
都来自一个只有200MB大小的数据库,所以我不知道是什么原因导致了OutOfMemoryException
。
发布于 2014-03-23 23:27:39
3年前的话题,但我找到了另一个可行的解决方案。如果您确定您有足够的空闲内存,运行64位操作系统,但仍然收到异常,请转到Project properties
-> Build
选项卡,并确保将x64
设置为Platform target
。
发布于 2011-12-20 00:04:47
在应用程序中,存储在数据库中的数据与存储在内存中的数据非常不同。
没有办法获得对象的确切大小,但您可以这样做:
GC.GetTotalMemory()
在加载了一定数量的对象后,查看加载列表时内存的变化情况。
如果是列表导致了过多的内存使用,那么我们可以寻找最小化它的方法。例如,为什么一开始就希望将50,000个对象一次性加载到内存中。根据需要调用数据库不是最好吗?
如果您看一下这里:http://www.dotnetperls.com/array-memory,您还会看到.NET中的对象大于它们的实际数据。泛型列表甚至比数组更占用内存。如果你的对象中有一个泛型列表,那么它会增长得更快。
发布于 2013-03-18 22:37:57
您不应该尝试一次获取所有列表,因为数据库中元素的大小与它放入内存的元素大小不同。如果你想处理元素,你应该使用for each循环,并利用实体框架的延迟加载,这样你就不会一次把所有的元素都放到内存中。如果想要显示列表,可以使用分页(.Skip()和.take() )
https://stackoverflow.com/questions/8563933
复制相似问题