程序占用太多内存

时间:2011-06-23 04:20:57

标签: c# wpf xaml memory conways-game-of-life

我正在使用WPF开发康威生命游戏的模拟器。

由于某种原因,有时程序会占用400,000K内存(当我快速绘制大量单元格时)。

如何减少内存使用量和/或减少由此造成的滞后。

编辑1: 主窗口代码: http://pastebin.com/mz0z7tBu

网格类: http://pastebin.com/ZHX1WBuK

cell struct:

struct Cell
{
    public int Neighbors {get; set;}
    public bool Alive { get; set; }
}

编辑2: 我将尝试解释程序结构: Cell是一个结构,包含类型为int的AutoProperty邻居,以及类型为bool的AutoProperty IsAlive。

CellGrid是一个包装2D数组Cell的类。 每次迭代时,每个Cell的Neighbors属性都会更新为包含Neighbors活动的数量,然后每个Cell的IsALive设置为true或false,取决于邻居的数量和之前的IsAlive状态。

MainWindow类有一个CellGrid类型的对象。 它将网格呈现给屏幕。

编辑3:

XAML:http://pastebin.com/Zp3dr8zc

resources.xaml:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Style TargetType="{x:Type MenuItem}">
        <Setter Property="HorizontalContentAlignment" Value="Center" />
        <Setter Property="VerticalContentAlignment" Value="Center" />
        <Setter Property="MaxHeight" Value="32" />
    </Style>
    <Style TargetType="{x:Type MenuItem}" x:Key="ParentMenuItem">
        <Setter Property="Width" Value="46" />
    </Style>
</ResourceDictionary>

1 个答案:

答案 0 :(得分:4)

这是使用DrawingContext / DrawingVisual的结果。它实际上是良性的,并且应该在系统需要时进行垃圾收集,但内存使用情况可能会令人担忧。相反,如果你要在画布上绘制形状,那么你可能不会看到这个问题。我在过去遇到了与自定义绘制控件相同的问题。切换到更多基于矢量的绘图技术(即画布上的形状)修复了内存消耗问题。