Hier ist ein Beispiel für einen kurzen Code, mit dem Sie die Speicheranforderungen und die Leistung Ihrer Steuerelemente testen können. Ich sehe nicht, was Sie tun sollten, um Bitmaps zu vermeiden. Ich denke, dass die meisten Steuerelemente von Drittanbietern auf ähnliche Weise funktionieren. Ich bin mir sicher, dass mein Code auf verschiedene Arten optimiert werden kann, aber Sie haben einige, um damit zu beginnen. Nicht sicher, wenn man 20000 Zeilen in einem Raster haben möchte, kann kein Benutzer das alles trotzdem sehen. Vielleicht kann man einen Weg finden, Sub-Sets gleichzeitig zu zeigen ..?
Die Erstellung des Bildes sollte wahrscheinlich nicht im Testobjekt (wie es das Datenmodell ist), sondern in der Präsentationsschicht (Ich habe das DataBindingComplete-Ereignis hinzugefügt, da dies für ähnliche Dinge verwendet werden kann), tat ich das hier, weil es einfacher war. Keine Bilder werden in einer Datei oder ähnlichem gespeichert.
Ich habe ein Formular mit einem DataGridView namens DataGridView1 erstellt.
Dies ist der Code für das Formular:
List<TestObject> _list = new List<TestObject>();
public Form1()
{
InitializeComponent();
dataGridView1.DataBindingComplete += new DataGridViewBindingCompleteEventHandler(dataGridView1_DataBindingComplete);
}
void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
}
private void Form1_Load(object sender, EventArgs e)
{
// Populate the grid, here you should add as many rows as you want to display
_list.Add(new TestObject("Obj1", 20, Brushes.Red, new int[]{3,4,5,3,5,6}));
_list.Add(new TestObject("Obj2", 10, Brushes.Green, new int[] { 1, 2, 3, 4, 5, 6 }));
_list.Add(new TestObject("Obj3", 30, Brushes.Blue, new int[] { 3, 2, 1, 1, 2, 3 }));
dataGridView1.DataSource = _list;
}
Ich habe auch ein Test-Objekt, das Netz zu füllen:
public class TestObject
{
private const int BitmapWidth = 100;
private const int BitmapHeight = 20;
private System.Drawing.Brush _color;
private string _name;
private int[] _numbers;
private int _value;
public TestObject(string name, int value, System.Drawing.Brush color, int[] series)
{
_name = name;
_numbers = series;
_color = color;
_value = value;
}
public string Name
{
get { return _name; }
}
public string Value { get { return _value.ToString(); } }
public Image Series
{
get
{
int width = BitmapWidth/_numbers.Length - _numbers.Length;
System.Drawing.Bitmap b = new Bitmap(BitmapWidth, BitmapHeight);
Graphics g = Graphics.FromImage(b);
g.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceCopy;
int current = 0;
for (int i = 0;i < _numbers.Length;i++)
{
g.FillRectangle(_color, current, BitmapHeight - (BitmapHeight/10) * _numbers[i], width, (BitmapHeight/10) * _numbers[i]);
current+=width + 2;
}
return b;
}
}
}
WinForms, WPF oder ... –
Ich bilde eine Desktop-Anwendung heißt WinForms –
WPF, Silverlight und Konsole sind auch Desktop-Anwendungen. –