Boxing-nak nevezzük azt a folyamatot, amikor egy érték típust elrejtünk egy referencia típusban, például egy object (osztály) típusú objektumban.
float fnumber = 1.00;
//Elrejti az fnumber-t az obj változóban.
object obj = fnumber;
Unboxing-nak, azaz kicsomagolásnak pedig azt a folyamatot nevezzük, amikor a referenciatípusból érték típust állítunk elő. A példa felhasználja az előző példánk típusait.
obj = 12.3;
//Kicsomagolja az obj-t, és betölti az fnumber változóba.
fnumber = (float)obj;
Performancia
A boxing mindig egy implicit, az unboxing pedig mindig egy explicit művelet. Mind a boxing, mind pedig az unboxing viszonylag költséges műveletnek számít, hiszen amíg a be dobozolás mindig lefoglal egy új memóriaterületet, példányosít, majd átmásolja az értéket az objektumba, addig az unboxing szintén költséges műveletet hajt végre, hiszen szükséges, hogy át cast-olja, típuskonverzióra kényszerítse az objektumunkat.
Tipp
Ha lehetséges, kerüljük azokat az eseteket, amikor különösen nagy mennyiségű érték típust kellene bedobozolnunk. Érdemes generikus típusú listát használnunk, hogy elkerüljük az érték típusok becsomagolását. A dobozolás akár 20-szor is lassabb lehet, mint egy referencia típus értékadás. Az unboxing során a típuskonverzió 4-szer lassabb, mint egy értékadás.
Ugyan így, hogyha sok stringet (szöveget) szeretnénk összefűzni, használjunk inkább StringBuildert!
Kapcsolódó bejegyzések
Forrás
https://docs.microsoft.com/en-us/dotnet/framework/performance/performance-tips
https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/types/boxing-and-unboxing