Ho fatto qualche ottimizzazione per il seguente pezzo di codice:
public void DrawLine(int x1, int y1, int x2, int y2, int color)
{
_bitmap.DrawLineBresenham(x1, y1, x2, y2, color);
}
Dopo averlo profilato, il 70% circa del tempo trascorso è stato ottenere un contesto per disegnarlo e smaltirlo.
Ho finito per disegnare il seguente sovraccarico:
public void DrawLine(int x1, int y1, int x2, int y2, int color, BitmapContext bitmapContext)
{
_bitmap.DrawLineBresenham(x1, y1, x2, y2, color, bitmapContext);
}
Fino a qui nessun problema, tutto quello che l'utente deve fare è passare un contesto e le prestazioni sono davvero grandi come un contesto viene creato / disposto una sola volta (in precedenza era mille volte al secondo).
Il passo successivo è stato renderlo generico nel senso che non dipende da un particolare framework per il rendering (oltre a .NET obvisouly).
Quindi ho scritto questo metodo:
public void DrawLine(int x1, int y1, int x2, int y2, int color, IDisposable bitmapContext)
{
_bitmap.DrawLineBresenham(x1, y1, x2, y2, color, (BitmapContext)bitmapContext);
}
Ora ogni volta che viene tracciata una linea viene lanciato il contesto generico , questo è stato per me inaspettato.
Esistono approcci per risolvere questo problema di progettazione?
Nota:
-
_bitmap
è un WriteableBitmap da WPF -
BitmapContext
è da WriteableBitmapEx libreria -
DrawLineBresenham
è un metodo di estensione da WriteableBitmapEx