L'ottimizzazione è terminata con il cast di un oggetto ad ogni chiamata di metodo

1

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:

posta Aybe 26.04.2014 - 15:48
fonte

2 risposte

1

L'ho risolto effettuando le seguenti operazioni: 2 metodi come in OpenGL per chiamare prima / dopo operazioni di disegno.

public void RenderBegin()
{
    _context = _bitmap.GetBitmapContext();
}

public void RenderEnd()
{
    _context.Dispose();
}

Non c'è bisogno di un ulteriore sovraccarico DrawLine e ovviamente il metodo usa il contesto ogni volta.

Ma non più brutto cast per ogni chiamata: D

    
risposta data 26.04.2014 - 16:15
fonte
0

Lo implementerei in modo che il contesto venga creato quando DrawLine viene chiamato per la prima volta e rende l'intera classe IDisposable e disponga il contesto in esso, se è stato creato, naturalmente.

    
risposta data 26.04.2014 - 16:20
fonte

Leggi altre domande sui tag