c#内存不足诊断
本文关键字:诊断 内存不足 | 更新日期: 2023-09-27 18:14:06
我已经看了很多文章,但到目前为止我还不知道如何更好地诊断我的问题。首先,基本信息。
这个主题64位。16gb内存。当我得到内存不足的异常时,Windows任务管理器说我使用了16 GB内存中的7.4GB。我在app.config中添加了
<gcAllowVeryLargeObjects enabled="true" />
,但我不认为我在做一个2GB的对象。GC.GetTotalMemory
告诉我我使用了多少,而不是我有多少可用的…我找不到那个方法,如果它存在的话。
我正在做的是从SQL数据库中读取17,000个股票符号。从1985年开始,每个符号每天都有开盘、高点、低点、收盘和成交量。这是最大尺寸;有些符号没有那么久远的历史。我为每只股票创建一个对象,每个对象都有一个开盘,高,低,收盘的列表。我将所有这些对象保存在一个List对象中。它基本上是一个指向数千个对象的指针,所以我怀疑它被认为是一个大对象。
从我可以看到我不应该得到这个内存异常,但不知道我可以使用什么其他工具来查看这个内存故障是从哪里来的。有没有其他的技巧,工具,我可以用来弄清楚是什么占据了这么多的空间?也许在visual studio中有一些设置对它使用多少内存有一个硬性上限(怀疑它)?
在VS2015中,在诊断窗格中,您可以获得整个堆的内存快照。确保您的程序处于中断状态,触发快照并查看您得到的列表。您甚至可以获得有关每个对象及其内部内容的信息!
事实上,你有一个64位操作系统并不意味着你的应用程序是64位的。如果你用16GB内存的64位应用程序耗尽内存,情况就很糟糕了。
感谢所有的快速回复。我在几个地方读到,如果构建配置管理器设置为ANYCPU,如果我有64位操作系统,它将运行64位,如果不是32位。显然是我读错了,或者是它错了。我将我的平台更改为x64,现在它在没有OOM的情况下读取我的所有数据…所以必须是这样。
谢谢…