Co jest nie tak w korzystaniu z GC.Collect ()?

Chociaż rozumiem poważne konsekwencje grania tą funkcją (a przynajmniej tak myślę), nie rozumiem, dlaczego staje się 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 zróżnicowane w zależności od tego, co robi użytkownik. Cykl życia aplikacji można podzielić na dwa główne etapy: edycję i przetwarzanie w czasie rzeczywistym. Podczas etapu edycji załóżmy, że tworzone są miliardy lub nawet biliony obiektów; niektóre z nich są małe, a niektóre nie, niektóre mogą mieć finalizatory, a inne nie, i przypuśćmy, że ich czas życia waha się od kilku milisekund do długich godzin. Następnie użytkownik decyduje się na przejście na etap w czasie rzeczywistym. W tym momencie załóżmy, że wydajność odgrywa podstawową rolę, a najmniejsza zmiana w przepływie programu może przynieść katastrofalne konsekwencje. Tworzenie obiektów jest następnie zmniejszane do minimum za pomocą pul obiektowych i takich, ale wtedy GC nieoczekiwanie wtrąca się i wyrzuca wszystko, a ktoś umiera.

Pytanie: Czy w tym przypadku nie byłoby rozsądnie wywołać GC.Collect () przed wejściem w drugi etap?

Przecież te dwa etapy nigdy nie pokrywają się ze sobą w czasie, a cała optymalizacja i statystyki, które GC mógł zebrać, byłyby tutaj mało przydatne ...

Uwaga: Jak niektórzy z was zauważyli, .NET może nie być najlepszą platformą dla takiej aplikacji, ale wykracza to poza zakres tego pytania. Celem jest wyjaśnienie, czy wywołanie GC.Collect () może poprawić ogólne zachowanie / wydajność aplikacji. Wszyscy zgadzamy się, że okoliczności, w których byś tak zrobił, są niezwykle rzadkie, ale z drugiej strony GC stara się odgadnąć i robi to doskonale przez większość czasu, ale wciąż chodzi o zgadywanie.

Dzięki.

questionAnswers(20)

yourAnswerToTheQuestion