Chociaż rozumiem poważne konsekwencje grania tą funkcją (a przynajmniej tak myślę), nie rozumiem, dlaczego staje się ona jedną z tych rzeczy, których szanowani programiści nigdy by nie używali, nawet ci, którzy nawet nie wiedzą po co to jest.
Powiedzmy, że tworzę aplikację, w której użycie pamięci jest bardzo różne w zależności od tego, co robi użytkownik. Cykl życia aplikacji można podzielić na dwa główne etapy: edycja i przetwarzanie w czasie rzeczywistym. Załóżmy, że na etapie edycji powstają miliardy, a nawet biliony obiektów; niektóre z nich są małe, a niektóre nie, niektóre mogą mieć finalizatory, a niektóre mogą nie, i przypuszcza się, że ich żywotność waha się od kilku milisekund do długich godzin. Następnie użytkownik decyduje się przejść do etapu czasu rzeczywistego. W tym miejscu załóżmy, że wydajność odgrywa fundamentalną rolę, a najmniejsza zmiana w przebiegu programu może przynieść katastrofalne skutki. Tworzenie obiektów jest następnie zredukowane do minimum przy użyciu pul obiektów i tym podobnych, ale potem GC nieoczekiwanie dzwoni i odrzuca wszystko, a ktoś umiera.
Pytanie: czy w takim przypadku nie byłoby mądrze wywołać GC.Collect () przed przejściem do drugiego etapu?
W końcu te dwa etapy nigdy się nie pokrywają w czasie, a cała optymalizacja i statystyki, które mógłby zebrać GC, byłyby tu mało przydatne ...
Uwaga: Jak niektórzy z was zauważyli, .NET może nie być najlepszą platformą dla takiej aplikacji, ale to wykracza poza zakres tego pytania. Celem jest wyjaśnienie, czy wywołanie GC.Collect () może poprawić ogólne zachowanie / wydajność aplikacji, czy nie. Wszyscy zgadzamy się, że okoliczności, w których zrobiłbyś coś takiego, są niezwykle rzadkie, ale z drugiej strony GC próbuje odgadnąć i robi to doskonale przez większość czasu, ale nadal chodzi o zgadywanie.
Dzięki.