【发布时间】:2012-09-28 14:43:43
【问题描述】:
我们编写了一个应用程序,该应用程序是一个需要 24 小时不间断运行的数字运算模拟。 它使用窗口形式的绘画事件来连续呈现主题的视觉表示,另外我们使用几个实时图形和网格来显示项目对象的进度。它是一个 .NET Windows 窗体应用程序。
4 小时后,我们得到 System outOfMemory 异常。
Memory Profiler 告诉我们,如果我们权衡一些实时图表和其他一些未处理的对象,我们可以节省“一些”(35%-40%) 内存。
我担心它仍然不会 24 小时不间断运行。我们的 HP 8440p Elitebook Intel i5 已经安装了 32 位 Win7 的 4GB RAM。
我们的目标是为我们的模拟应用程序和运行它的 .NET CLR 提供尽可能多的内存。 投资更多内存(可能是 8GB)和 64 位操作系统会有帮助吗?除了添加更多硬件之外,我还需要考虑哪些其他可能的 CLR 选项?
非常感谢。
【问题讨论】:
-
如果你有一些生命周期很短的对象,像一个较长生命周期的对象的注册事件会让它们活着。您是否订阅了活动但没有取消订阅?在我看来,这听起来像是一堆你认为已经死了但实际上并没有死的物体。
-
它实际上是保存图形绘图点的大数组的累积。我们正在添加当前值,并删除和处理旧值,但它是最大的内存消耗部分。
-
你知道阵列能有多大吗?此外,绘图点实例或其子对象/属性之一的长度是否超过 85,000 字节?