OnRender性能问题

时间:2010-09-17 09:21:17

标签: wpf performance

(对不起我的英语很差。)

我的工作是 - 在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 :(得分:0)

您是否在面板中为onrender尝试“OffSrceen”或“DoubleBuffer”方法,并且在更新面板时,只更新已更改的部分!

答案 1 :(得分:0)

有趣的是,我发现 - 使用OnRender的元素可能比许多FrameworkElements具有可视性要​​慢。

因此,将许多Line控件放到Panel中可以解决问题。