Программа занимает слишком много памяти - PullRequest
1 голос
/ 23 июня 2011

Я использую WPF для разработки симулятора игры жизни Конвея.

Почему-то иногда программа занимает до 400 000 КБ памяти (когда я очень быстро рисую много ячеек).

Как можно уменьшить использование памяти и / или уменьшить лаги, вызванные этим.

Редактировать 1: Код главного окна: http://pastebin.com/mz0z7tBu

класс сетки: http://pastebin.com/ZHX1WBuK

структура ячейки:

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

Редактировать 2: Я постараюсь объяснить структуру программы: Ячейка - это структура, содержащая соседей AutoProperty типа Type и AutoProperty IsAlive ofType bool.

CellGrid - это класс, который упаковывает двумерный массив ячеек. Каждую итерацию, свойство Neighbors каждой ячейки обновляется, чтобы содержать количество живых соседей, а затем 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 Ответ

4 голосов
/ 23 июня 2011

Это результат использования DrawingContext / DrawingVisual.Это на самом деле доброкачественно и все должно быть собрано по мере необходимости, но система может вызывать тревогу.Если бы вы вместо этого рисовали фигуры на холсте, вы, вероятно, не увидели бы эту проблему.Я сталкивался с этой же проблемой с настраиваемыми элементами управления в прошлом.Переход на более векторные методы рисования (например, фигуры на холсте) устранил проблему потребления памяти.

...