Co oznaczają pojęcia boxing i unboxing? Jeśli ktoś kiedyś przygotowywał się do rozmowy kwalifikacyjnej czy do zaliczenia z podstaw języka C# na studiach, na pewno słyszał/czytał, że powyższe pytanie to pewniak na 100% o to spytają. Może i tak było, ale czy oprócz wykutych regułek orientujecie się, kiedy boxing występuję w praktyce na placu boju. W artykule omówię znane mi przykłady boxingu.
Sztuka programowania 2271 dni, 9 godzin, 10 minut temu 201 źrodło rozwiń
Dziś mały eksperyment. Chciałbym pokazać jaki jest faktycznie spadek wydajności jeśli zachodzi potrzeba boxing’u i unboxing’u. Wiele o tym ostatnio pisałem ale nie pokazałem najważniejszego – liczb opisujących wydajność. Na początek porównanie boxing z unboxing:privatestaticvoid TestBoxingAndUnboxing() { object boxedValue =null; // boxing Stopwatch stopwatch = Stopwatch.StartNew(); for (int i =0; i < iterations;="" i++)="" {="" int="" unboxed="(int)" boxedvalue;="" }="" stopwatch.stop();="" ...
Sztuka programowania 4417 dni, 19 godzin, 11 minut temu 90 źrodło rozwiń
Dziś trochę o podstawach C# ale myślę, że wszyscy znajdą coś wartościowego w tym wpisie bo chcę pokazać jak to działa od środka CLR. Na początek przykład boxing’u:staticvoid Main(string[] args) { int value =3; object referencedType = value; } Boxing to nic innego jak utworzenie typu referencyjnego na podstawie value type. Object to typ referencyjny przechowywany na stercie, z kolei integer to zwykły value type przechowywany na stosie. Opisowo, boxing składa się z 3 operacji:Alokacja pamięci na s...
Sztuka programowania 4470 dni, 6 godzin, 22 minuty temu 132 źrodło rozwiń
W zeszłym poście pisałem o strukturach w c#. Jednym z ważnych efektów ubocznych jest boxing oraz unboxing. Jak wiemy z poprzedniego wpisu struktury przechowywane są na stosie a klasy na stercie. Boxing to niż innego jak wrapping struktury (lub jakiekolwiek innego typu wartościowego) w obiekt przechowywany na stercie. Na przykład:int value=0; object boxedValue=value; // boxing Zmienna value przechowywana jest na stosie, z kolei boxedValue na stercie (pamiętajmy o nagłówku oraz GC). Należy zwrócić szcz...
Rozwiązanie problemu wypisania boxingu i unboxingu, oczywiście chodziło mi komendę: ildasm TestBox.exe /text | findstr box Jest to chyba najszybszy sposób uzyskania informacji o boxingu i unboxingu w kodzie, a staje się on jeszcze szybszy gdy zastosujemy rozszerzenie PowerCommands, wtedy wystarczy jedynie kliknąć na projekcie wybrać Open Command Prompt i następnie przejść do katalogu bin/debug|release gdzie już możemy spokojnie operować na pliku – oczywiście dla chcących nie powinno być problemu wpr...
Małe odejście od PivotViewer, poniżej mamy prosty kod (wystarczy go wkleić do aplikacji konsolowej by się uruchomił). Chciałbym wypisać (to jest ważne, nie chcę widzieć tego w UI, chcę to wypisać sobie) wszystkie operacje boxingu i unboxingu znajdujące się w tym kodzie (może to być to numer linii i typ operacji, lub sam typ operacji plus informacja w którym miejscu to następuje).
Architektura 5211 dni, 23 godziny, 4 minuty temu 69 źrodło rozwiń