Generalnie podążam za wzorcem IDisposable
, a dla większości klas jest to uzasadnione. Ale ReaderWriterLockSlim
zmusiło mnie do kwestionowania możliwości zastosowania takiego wzoru. Wszystko, co robi ReaderWriterLockSlim.Dispose
, zamyka niektóre uchwyty zdarzeń. Jak ważna jest taka klasa z tak małą ilością zasobów? W tym przypadku nie miałbym nic przeciwko, gdyby GC musiał czekać na kolejną rundę, aby finalizatorzy niezarządzanych zasobów mogli dokończyć.W jaki sposób "disposable" to ReaderWriterLockSlim?
Konsekwencja zastosowania wzoru IDisposable
jest znaczna, jednak każda klasa korzystająca z klasy jednorazowej musi teraz również wdrożyć IDisposable
. W moim konkretnym przypadku implementuję wrapper dla HashSet
. Nie spodziewam się w szczególności wymogu pozbywania się takiego obiektu, ponieważ przypadkowo używa on synchronizatora, który to robi.
Czy są jakieś powody, aby nie naruszać wzoru jednorazowego w tym przypadku? Chociaż jestem chętny, nie zrobiłbym tego w praktyce, ponieważ naruszenie spójności jest znacznie gorsze.
Twój problem polega na tym, że używasz niestatycznej blokady, która ma taki sam czas życia jak obiekty? –
@NathanCooper - Z grubsza, tak. Utworzenie blokady dla każdej operacji odczytu/zapisu również nie jest efektywne. Mógłbym użyć 'Monitor', ale martwię się konwojami blokującymi. – toplel32
, więc czytasz coś lub piszesz i nie jest to statyczne? Jest to więc pewien zasób dla każdej instancji. –