Archief - C# file stream afsluiten

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

SideShow

Legacy Member
Hallo

Ik heb een object (een soort database) die nogal veel bewerkingen doet in een bestand op mijn schijf.
Ik wil niet in elke methode van dat object een using zetten die dan die stream gaat openen, want dit veroorzaakt vertraging. Het gaat over honderden read/writes per seconde, ik zou dit met een factor willen opdrijven...

Nu is de vraag: sluit ik mijn stream in een destructor, of sluit ik de stream in mijn dispose methode? En als ik dan IDispose implementeer in mijn database-object, moet ik dan elk programma of class die het database object aanroept, ook IDisposable maken? Dat zou me niet logisch lijken? De stream moet gewoon open blijven vanaf dat het object wordt geïnitialiseerd...

Voor de geïnteresseerden: voor de hobby ben ik een search tree aan het schrijven, disk implementatie. Een applicatie voert constant db.Add(key, value) methodes uit op het tree object. Als me dit een beetje deftig gelukt is, start ik aan de b-tree

Tyfius

Legacy Member
Best altijd de voorkeur geven aan IDisposable. De finalizer (of destructor) is afhankelijk van hoe de GC geimplementeerd is, en die kan verschillen van versie tot versie. Onder andere Joe Duffy heeft daar ooit eens een goed artikel over geschreven. Je leest best ook eens Implementing IDisposable correctly.

Je hoeft niet elke klasse die je IDisposable klasse gebruikt ook IDisposable maken. Je kan zelf die Dispose() methode oproepen waar je wil. Ik vermoed dat je die database klasse ergens gaat initializeren, voorzie daar een equivalente DeInit() methode bijvoorbeeld en roep daar Dispose() op.

SideShow

Legacy Member
Ok, heb het alvast gedaan zoals je zegt.
In mn applicatie zelf zet ik nu de database-object code in een using.

1 miljoen willekeurige tree nodes erin pompen duurt nu slechts een tweetal minuten hier, waarbij je rekening moet houden dat 1 toevoeging makkelijk 50 lees/schrijf operaties uitvoert (omdat er reeds superveel nodes aanwezig zijn)

Super ! (al zal dit natuurlijk ook te makken hebben met cache in de disk en windows zelf)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan