2010-09-17 75 views
0

(對不起我的英語不好)OnRender性能問題

我的工作是 - 在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)); 
     } 

現在,你知道我的工作是什麼。

上面的代碼給我正確的操作,除了低性能。

確實很慢....

什麼是錯?我怎樣才能讓它更快?

回答

0

您是否在面板中嘗試使用「OffSrceen」或「DoubleBuffer」方法進行渲染,並且在更新面板時只更新更改的部分!

+0

嗯..你的答案不能解決。它正確地在WinForm框架中工作,但不在WPF中。 WPF使用不同的圖形佈局系統。 – illef 2010-09-20 00:56:54

+0

噢,對不起!上述提供了一些關於你的表現繪圖的想法! – 2010-09-21 01:41:51

0

有趣的是,我發現 - 使用OnRender的元素可能比許多FrameworkElements具有可視化的要慢。

因此,將許多Line控件放到面板上可以解決問題。