程序占用太多内存

发布于 2024-11-16 21:43:41 字数 1588 浏览 3 评论 0原文

我正在使用 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: 我将尝试解释程序结构: Cell 是一个包含 int 类型的 AutoProperty 邻居和 bool 类型的 AutoProperty IsAlive 的结构。

CellGrid 是一个包装二维单元格数组的类。 每次迭代,每个 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>

I'm using WPF to develop a simulator of Conway's Game of Life.

From some reason, sometimes the program takes up to 400,000K memory (When I draw a lot of cells really fast).

How can I reduce the memory usage and/or reduce the lags caused by it.

Edit 1:
Main Window Code:
http://pastebin.com/mz0z7tBu

Grid class:
http://pastebin.com/ZHX1WBuK

cell struct:

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

Edit 2:
I'll try to explain Program Structure:
Cell is a structure that contains AutoProperty neighbors ofType int, and AutoProperty IsAlive ofType bool.

CellGrid is a Class that wraps a 2D array of Cells.
Every iteration, each Cell's Neighbors property is updated to contain the number of Neighbors alive, and then each Cell's IsALive is set to true or false, depends on number of neighbors and previous IsAlive state.

The MainWindow class has an object of type CellGrid.
It renders the grid to the screen.

Edit 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>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

反目相谮 2024-11-23 21:43:41

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

This is the result of using a DrawingContext/DrawingVisual. It's actually benign and should all be garbage collected as the system needs it, but the memory usage can be alarming. If you were to, instead, draw shapes on a canvas then you would probably not see this problem. I've run into this same issue with custom drawn controls in the past. Switching to more vector-based drawing techniques (i.e., shapes on a canvas) fixed the memory consumption problem.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文