我試圖建立自己的極座標圖。我用一個函數來畫點如下:c#同時畫很多圈
private void drawPoints()
{
this.SuspendLayout();
Graphics g = this.CreateGraphics();
int i = 0;
foreach (Point Pointaktuell in PointList)
{
int radius = 15;
Brush b = new SolidBrush(Color.Red);
g.FillEllipse(b, (int)(Pointaktuell.X - radius/2.0), (int)(Pointaktuell.Y - radius/2.0), radius, radius);
i++;
}
PointList.Clear();
this.ResumeLayout();
}
的問題是點是畫一個一個之後,並且需要大量的時間。我怎樣才能一次繪製它們?
首先要注意:刪除「刷B =新SolidBrush(Color.Red);」和「int radius = 15;」在foreach循環中並在循環外創建它們。 – Odrai
您在每個循環步驟中實例化一個新的「SolidBrush」實例。而且你每次都重複定義「半徑」。爲什麼不把它們從循環中拿出來呢? 'const int radius = 15;'和'刷新b =新的SolidBrush(Color.Red)'爲什麼如果你需要一個計數器'i'使用'foreach'?爲什麼不''爲' –
當你繪製成千上萬的圓圈時,它將會明顯變慢。不可避免地,你會重疊點,使它們消失。所以你在浪費時間繪製用戶永遠看不到的點。另一個重要的問題是你使用CreateGraphics()。這總是錯誤的,你必須使用Paint事件。它支持雙緩衝,使得這些點逐一繪製的情況變得不那麼明顯。雙位緩衝自己的位圖,所以你不必重複這樣做是另一種標準技巧,現在它是一個非常便宜的DrawImage()調用。或者使用圖表控件。 –