Проблемы с производительностью OnRender - PullRequest
0 голосов
/ 17 сентября 2010

(извините за плохой английский.)

Моя работа - рисовать линии в Panel.

Для этого я переопределил метод Panel OnRender и вставил следующий код.

    /// <summary>
    /// 라인의 두께
    /// </summary>
    private const double LINE_THICKNESS = 0.5d;
    /// <summary>
    /// 가로줄의 간격
    /// </summary>
    private const double GAP_PER_WIDTHLINE = 30d;
    /// <summary>
    /// 세로줄의 간격
    /// </summary>
    private const double GAP_PER_HEIGHTLINE = 12d;


        int lineCount = 0;
        for (double x = GAP_PER_WIDTHLINE; x < this.ActualHeight; x += GAP_PER_WIDTHLINE)
        {
            lineCount++;
            if (lineCount % 5 == 0)
            {
                dc.DrawLine(solidPen, new Point(0, x), new Point(this.ActualWidth, x));
                lineCount = 0;
            }
            else
                dc.DrawLine(dotPen, new Point(0, x), new Point(this.ActualWidth, x));
        }

        //# 세로줄
        lineCount = 0;
        for (double y = GAP_PER_HEIGHTLINE; y < this.ActualWidth; y += GAP_PER_HEIGHTLINE)
        {
            lineCount++;
            if (lineCount % 5 == 0)
            {
                dc.DrawLine(solidPen, new Point(y, 0), new Point(y, this.ActualHeight));
                lineCount = 0;
            }
            else
                dc.DrawLine(dotPen, new Point(y, 0), new Point(y, this.ActualHeight));
        }

Теперь вы знаете, в чем моя работа.

Верхний код дает мне правильную работу, за исключением низкой производительности.

Это действительно медленно ....

Что не так?Как я могу сделать это быстрее?

Ответы [ 2 ]

0 голосов
/ 20 сентября 2010

Интересно, я обнаружил - элементы с OnRender могут быть медленнее, чем многие FrameworkElements имеют визуальные.

Таким образом, решение проблемы с размещением множества элементов управления Line на Panel.

0 голосов
/ 17 сентября 2010

Попробуете ли вы метод "OffSrceen" или "DoubleBuffer" для своего onrender в панели, а при обновлении панели обновляйте только измененные части!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...