數百萬的控件可能會成爲一個記憶豬,但是您的控件的重量可能很輕。在這種情況下我會做的是創建一個執行繪圖操作(並從System.Windows.Forms.Control
繼承)和一個類MyDrawingObject,爲那些數百萬對象的每個實例保留必要的數據的控件。然後,繪圖類將擁有這些MyDrawingObjects的集合(List,Array或其他東西),並且可以隨時繪製它們。
假設您的繪圖對象是具有不同半徑,顏色,位置和重量的球。我的球類會是這樣的:
class Ball
{
public float Radius {get; set;}
public int Color {get; set;}
public float Weight {get; set;}
public Point Position {get; set;}
...
}
現在我的控制會是這樣的:
class MyDrawingBoard : System.Windows.Forms.Control
{
List<Ball> MyBalls = new List<Ball>();
override void OnPaint(object sender, PaintEventArgs e)
{
foreach(var b in MyBalls)
{
e.Graphics.DrawEllipse()...
}
}
}
您可以通過繪製只有那些與ClipRectangle
相交的對象,甚至會進一步提高性能針對不同類型的對象管理多個List
的程度。這一切都取決於您的需求和您的應用程序的目標。
一個名爲MyBalls的變量,優雅:) – Max