Your browser is no longer supported. Update it to get the best YouTube experience and our latest features. Learn moreOperaMozilla FirefoxGoogle ChromeMicrosoft EdgeRemind me laterAboutCopyrightContact usTermsPrivacyPolicy & Safety© 2022 Google LLC
Wanna know what is fReachable queue, how finalization works in .NET and how to use a Dispose pattern? Come and read a new post in my .NET Internals series :)
Sztuka programowania 2231 dni, 23 godziny, 59 minut temu 45 źrodło rozwiń
Examining garbage collection in more details today. We'll see what is marking phase, actual collection process and heaps compaction to make it more efficient. Come and read! :)
Sztuka programowania 2246 dni, 21 minut temu 66 źrodło rozwiń
Starting from .NET Core 2.0 coupling between Garbage Collector and the Execution Engine itself have been loosened. Prior to this version, the Garbage Collector code was pretty much tangled with the rest of the CoreCLR code. However, Local GC initiative in version 2.0 is already mature enough to start using it.
Blog programistyczy. Ale także o fotografii i bieganiu.MenuHomeDaj Się Poznać 2017Fat Can RunFotografiaBrak komentarzy Nasz wspaniały język C#, znosi z nas prawie pełną odpowiedzialność za sprzątanie po sobie. Można by rzec, iż mamy zatrudnioną sprzątaczkę i nawet nie wiemy kiedy magicznie bałagan znika. Oczywiści mowa tutaj o Garbage Collector. Jeszcze dzisiaj pamiętam trudność, i obowiązek kontrolowania wycieków pamięci gdy pisałem oprogramowanie z wykorzystaniem języka C++. Z drugiej strony człowi...
Daj się poznać 2017 2709 dni, 33 minuty temu 75 źrodło rozwiń
W poprzedniej części o GC przybliżyłem jak działa alokowanie pamięci w .Net oraz czym różnią się systemy, które liczą referencje od tych, które je śledzą. Przed nami część druga czyli... Generacje!
Architektura 2790 dni, 23 godziny, 12 minut temu 189 źrodło rozwiń
Od jakiegoś już czasu chciałem dokładnie poznać jak działa mechanizm oczyszczania pamięci w .Net. Dlaczego? Z czystej, niewymuszonej ciekawości! Czy jako programista musisz znać dokładnie jak działa Garbage Collector? Nie. Ale czyż nie jest to ciekawe? Poznać lepiej mechanizm który dał sporą przewagę językowi C#? Jeżeli jesteś ciekawski tak samo jak ja to zapraszam do artykułu!
Architektura 2802 dni, 16 minut temu 182 źrodło rozwiń
Just how long does garbage collection take in .NET? Which generation takes longer?
Sztuka programowania 2991 dni, 20 godzin, 4 minuty temu 124 źrodło rozwiń
Kolejna część artykułu o GC. Zapraszam do lektury: http://msdn.microsoft.com/pl-pl/library/garbage-collector-cz-4-wycieki-pamieci
Sztuka programowania 4124 dni, 20 godzin, 56 minut temu 252 źrodło rozwiń
Kolejna część artykułu o GC – tym razem o zasobach niezarządzanych. Zapraszam do lektury: http://msdn.microsoft.com/pl-pl/library/garbage-collector-cz-3-zasoby-niezarzadzane
Sztuka programowania 4147 dni, 9 godzin, 3 minuty temu 122 źrodło rozwiń
Jakiś czas temu zapowiadałem drugą część artykułu o GC. Tym razem będzie o różnych trybach GC i kiedy z jakiego należy korzystać, tak, aby aplikacja zachowywała się płynnie oraz sprawiała wrażenie, że działa w czasie rzeczywistym. Zapraszam do lektury!
Sztuka programowania 4162 dni, 3 godziny, 4 minuty temu 122 źrodło rozwiń
Na wstępnie od razu chciałbym dodać, że dla większości aplikacji, dalsze rozważania w tym poście nie mają sensu i należy to traktować jako ciekawostkę. Dla części systemów może to jednak być ważne a mianowicie dla oprogramowania działającego w “czasie rzeczywistym”, wymagającego low-latency. Dzisiejszy wpis może powstał trochę zbyt wcześnie ale wkrótce powinna pojawić się druga część mojego artykułu o GC, który będzie dotyczył różnych trybów kolekcji. Jednym z tych trybów jest wykonywanie kolekcji w spo...
Sztuka programowania 4177 dni, 2 godziny, 50 minut temu 128 źrodło rozwiń
Właśnie został opublikowany kolejny mój artykuł, tym razem o GC. Zapraszam do lektury: http://msdn.microsoft.com/pl-pl/library/garbage-collector-cz-1
Sztuka programowania 4196 dni, 23 godziny, 15 minut temu 218 źrodło rozwiń
GC nic nie wie o zasobach niezarządzanych. Nie wie ile pamięci one zajmują oraz oczywiście nie jest w stanie zwolnić takich zasobów. O zarządzaniu taką pamięcią pisałem już wiele razy. Opisywałem również zasadę działania GC. Zwykle jest on odpalany po przekroczeniu pewnego progu zużycia pamięci. Niestety, jak wspomniałem, GC nie wie nic o niezarządzanych zasobach. Co w przypadku gdy wrapper zużywa bardzo mało pamięci a zasoby niezarządzane w nim konsumują bardzo wiele pamięci? Dzięki metodom AddMemoryPre...
Sztuka programowania 4244 dni, 14 godzin, 14 minut temu 139 źrodło rozwiń
Programiści niskopoziomowi często narzekają na brak pewnych możliwości w C# znanych im z C++ (często ze względu na brak znajomości ich odpowiedników w C#. Po dzisiejszej rozmowie z kolegą na ten temat stwierdziłem, że pokażę jak wykorzystać takie funkcje jak memset, a przy okazji jak pisać biblioteki DLL w C++ dla C# i jak z nich korzystać. Sprawdzimy także, czy zastosowanie takich bibliotek przyśpieszy działanie...
Sztuka programowania 4278 dni, 19 godzin, 41 minut temu 316 źrodło rozwiń
Wielu z Was kojarzy zapewne konstrukcję unsafe do deklarowania stref niezarządzanych w których możemy np. wykorzystywać wskaźniki i inne mechanizmy znane z języków niezarządzanych. Słowo fixed wydaje mi się, że jest nieco mniej popularne. Wiemy, że w środowisku .NET, gdzie zasoby pamięci zarządzane są przez Garbage Collector, obiekty mogą zmieniać swój adres. W poprzednich postach (o GC) pisałem, że przy zwolnieniu obiektów, wszystkie pozostałe są szeregowane jeden po drugim, tak aby uniknąć problemów ...
W ostatnim poście obiecałem pokazać na przykładzie, że destruktory rzeczywiście mają negatywny wpływ na wydajność. Mamy prostą klasę:class MyClass { ~ MyClass() { // Jakis bezensowny kod np:for (int i =0; i <100*10000; i++) { var newinstance =new myclass(); } stopwatch.stop(); long duration = stopwatch.elapsedmilliseconds; przyjrzyjmy się teraz diagramowi przedstawiającemu rozkład obiektów względem generacji (clr profiler): na moim komputerze duration wyniósł 900. usuńmy destruk...
Jeśli miał ktoś do czynienia np. z CPP z pewnością kojarzy pojęcie destruktora. Jest to metoda, wywoływana w momencie zwalniania obiektu z pamięci (przeciwieństwo konstruktora). Zarówno w CPP jak w C#, nazwa destruktora stanowi ‘~’ plus nazwa klasy.
W poprzednim poście przedstawiłem zasadę działania generacji w GC. Dowiedzieliśmy się, że zwalnianie zasobów z generacji 0 jest bardzo szybkie z kolei z GEN 2 wolne. Healthy GC to reguła określająca optymalny (zdrowy) stan GC: gen0 : gen1 : gen2 => 100 : 10 : 1 W Internecie można również znaleźć nieco inne wartości ale ogólna zasada jest taka sama: GEN0 powinna zawierać dużo więcej obiektów niż GEN2. Jeśli obiekty nie są zwalniane, wtedy promowane są do generacji pierwszej i drugiej. Z poprzedniego po...
W poprzednim poście przedstawiłem ogólne zasady działania GC w zarządzanych językach. Dziś przyjrzymy się bardziej na konstrukcję rozwiązania Microsoft’owego. Zakładam, że czytelnik zna już algorytm Mark&Sweep. Pamięć alokowana w .NET jest przechowywana w tzw. generacjach. Istnieją 3 generacje:Generation 0 – zwolnienie obiektu z GEN0 jest szybkie i mało kosztowne. Przechowywane są w niej obiekty używane tylko przez krótki czas. Generation 1 – obiekty, które awansowały z GEN0. Zwolnienie zasobów w GE...