Wpis z mikrobloga

Odnośnie mojego problemu z tego posta: https://www.wykop.pl/wpis/33780461/chciej-stworzyc-archiwum-zip-z-jednym-pliczkiem-ea/

Generalnie, problem polegał na tym, że nie było problemu ( ͡° ͜ʖ ͡°) Metoda Dispose() działała jak należy, więc czemu się nie zapisywało?

Ano dlatego, że przed tamtą metodą na start programu odpalałem inną, która wczytywała plik i go rozpakowywała. Doszedłem do tego, że mimo wywołania Dispose() plik ciągle był w pamięci. Dlaczego? Ano dlatego, że w ciągu kilku sekund po wczytaniu pliku od razu chciałem go nadpisać.

Co powodowało, że Garbage Collector nie mógł zadziałać bo miał za malo czasu by zebrać plik.

Teraz przed każdym wczytaniem, manipulacją pliku ręcznie wywołuje GC.Collect(). I działa.

Czy to jest rzeczywistość programisty? Gdzie głowimy się nad problemem kilka godzin, a okazuje się, że jedna linijka rozwiązuje problem? ( ͡° ʖ̯ ͡°)

#naukaprogramowania #csharp
TymRazemNieBedeBordo - Odnośnie mojego problemu z tego posta: https://www.wykop.pl/wp...

źródło: comment_z3ySIa1EvmKX5P276d6ceLb7ASvHndvx.jpg

Pobierz
  • 14
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@bacteria: @Czesiowcy: nie użyłem tagu #naukaprogramowania by się pochwalić tylko by czegoś się nauczyc. słowa "zostało ci to już wytłumaczone" "robisz to katastrofalnie" to domena elektrody, odeślijcie mnie jeszcze do google i dajcie warna.

Co robię źle? Użycie dispose? Nie używam go przy using jak mi zostało wytłumaczone. Użycie streamu? Będe nad tym myslał, jeśli zrobię resztę logiki w kodzie
  • Odpowiedz
@TymRazemNieBedeBordo: Istnieje bardzo niewiele przypadków, gdzie manualne wywołanie GC.Collect() ma jakikolwiek sens i ten tutaj się do nich nie kwalifikuje. GC.Collect() to blokująca i bardzo zasobożerna operacja, lecąca po wszystkich generacjach GC; w kodzie produkcyjnym mogłaby stanowić bardzo wąskie gardło. Operujesz na plikach, gdzie będzie - pod spodem - w użyciu sporo niezarządzanych referencji, Dispose() zapewne je zamyka. Jeżeli jednak problemem jest wielokrotne tworzenie ZipFile, to dlaczego po prostu nie
  • Odpowiedz
W ostatnim poscie


@bacteria: ale mirko to nie jest moja kontrola wersji

stnieje bardzo niewiele przypadków, gdzie manualne wywołanie GC.Collect() ma jakikolwiek sens i ten tutaj się do nich nie kwalifikuje. GC.Collect() to blokująca i bardzo zasobożerna operacja, lecąca po wszystkich generacjach GC; w kodzie produkcyjnym mogłaby stanowić bardzo wąskie gardło. Operujesz na plikach, gdzie będzie - pod spodem - w użyciu sporo niezarządzanych referencji,Dispose() zapewne je zamyka. Jeżeli jednak problemem jest wielokrotne tworzenie ZipFile, to dlaczego po prostu nie operujesz cały czas na jednym obiekcie? Jakie są ku temu
  • Odpowiedz