Supponiamo che più oggetti della stessa classe debbano fare qualcosa che richiede una risorsa che consuma memoria. Quale dei seguenti approcci è raccomandato per definire e utilizzare la risorsa in base agli oggetti?
- Ogni oggetto crea la risorsa nel proprio
- Dichiara un'istanza di risorsa e passa a ciascun oggetto
- Utilizzo di un oggetto statico per la risorsa
Fammi dare un esempio
class Section
{
public Bitmap Page {/* set and get the page...*/}
Bitmap page = new Bitmap(600,800);
Draw(SomeThing s)
{
// Draw something on the page
}
}
// in somewhere else
foreach (Section sect in Sections)
{
sect.Draw(something);
Video.AddFrame(sect.Page);
}
Versus.
class Section
{
public Bitmap Page {/* set and get the page ...*/}
Bitmap page; // it isn't instantiated in the class
Draw(SomeThing s)
{
// Clear the page
// Draw something on it
}
}
// in somewhere else
Bitmap screen = new Bitmap(600,800); // the common resource
foreach (Section sect in Sections)
{
sect.Page = screen;
sect.Draw(something); // it clears it before drawing something on it
Video.AddFrame(screen);
}
Versus.
class Section
{
public Bitmap Page {/* set and get the page ...*/}
static Bitmap page = new Bitmap(600,800);
Draw(SomeThing s)
{
// First Clear the page
// Draw something on the page
}
}
// and in somewhere else
foreach (Section sect in Sections)
{
sect.Draw(something);
Video.AddFrame(sect.Page);
}
Per prima cosa ho usato il primo approccio ma ho consumato molta memoria dato che ogni oggetto nel mio array Sections
aveva una bitmap. Poi sono stato costretto a provare il secondo approccio. Questo nuovo approccio è migliore del primo su tutti gli aspetti? Qual è la linea guida per tali situazioni?