1

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

由于某种原因,有时程序会占用高达 400,000K 的内存(当我非常快地绘制很多单元格时)。

如何减少内存使用和/或减少由此引起的滞后。

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

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

细胞结构:

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

编辑 2: 我将尝试解释程序结构:单元格是一个结构,它包含 int 类型的 AutoProperty 邻居和 bool 类型的 AutoProperty IsAlive。

CellGrid 是一个包装二维单元格数组的类。每次迭代,每个 Cell 的 Neighbors 属性都会更新以包含活着的 Neighbors 的数量,然后将每个 Cell 的 IsALive 设置为 true 或 false,这取决于邻居的数量和之前的 IsAlive 状态。

MainWindow 类有一个 CellGrid 类型的对象。它将网格渲染到屏幕上。

编辑3:

XAML: http: //pastebin.com/Zp3dr8zc

资源.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>
4

1 回答 1

4

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

于 2011-06-23T05:05:12.717 回答