#30 Ovrscout
ještě v souvislosti s memory leaky můžeš skusit CLR profiler , ale zatím jsem to moc nepoužíval.
Příspěvky odeslané z IP adresy 2a02:768:3e0f:396:2cbb:3a82:9421:2e58...–
#29 hlucheucho
Do memory streamu se neukládá přímo objekt ani vazba na něj. Tam se ukládaji serializovaná data do nějakého byte[] pole (respektive se nakopírují do toho pole..)
Takže původní objekt může být zrušen i když ten buffer je pak dál používaný.
Fragmentace je spíše problém "adresního prostoru" který vzniká mixováním alokací dlouhodobých a krátkodobě "žijících" kdy díky shodě okolností není mezi alokovanými oblastmi dost místa na novou velkou. I když celkově je místa dost. Pokud je tam jen hromada krátkodobě žijících objektů tak to nebývá problém.
Ve většině případů si ale gc v .NET poradí sám. A pokud není paměť přiPINovaná kvůli IO, použití v DLL atp. tak dokáže pamět i "defragmentovat".
Ale v návaznosti na tvůj příspěvek ještě dodám pro Mutagen:
Mutagen
Možná to už tak máš, sorry pokud je to pro tebe běžná věc(proto mne to nenapadlo rovnou), ale:
před tím "vynulováním" bitmapy = null, děláš Dispose? - Obecně nad každým Objektem co má IDisposable je dobré použít using( new ...) nebo Dispose(). A opět obecně, zkus projít vytvářené objekty a zkouknout to (někdy je to IDisposable zděděné jako zde a není na první pohled vidět).
Asi taky víš, ale zkoukni jestli ti nezůstávají reference, třeba ta Bitmapa, FileStreamy na čtení, … . Třeba v nějakých dlouho žijících objektech (ale i v krátce žijících se někdy vyplatí ušetřit GC práci a nepotřebné reference vynulovat, obzvlášt pokud se odkazují "kruhově" ale to tu asi nehrozí).
Ještě k tomu FileStream s bufferem měl jsem namysli toto
#23 Mutagen
Pokud můžeš tak zkus nahradit MemoryStream za BufferedStream navázaný přímo do výstupního souboru. Ten pak průběžně ukládá vždy když se mu naplní buffer.
Nad ním pak udělat BinaryWriter stejně jako dřív nad MemoryStream-em takže ostatní kód by snad měl zůstat stejný.
Velikost bufferu v řádu 1..10MB by měla stačit. Ale je třeba to změřit, Teoreticky by to mohlo být podobně rychlé jako (memory stream + jednorázové uložení).
P.S. kdyby jsi to popsal tak pěkně jako v předchozím postu už dřív tak bych to možná pochopil dřív i já :)
Ty to ze svých postů samozřejmě pochopíš, protože víš o čem jsi psal, ale pro ostatní, nebo alespoň pro mne, je o hodně těžší si to z těch střípků složit.