Anonymní profil Ovrscout – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Ovrscout – Programujte.comAnonymní profil Ovrscout – Programujte.com

 

Příspěvky odeslané z IP adresy 2a02:768:3e0f:396:2cbb:3a82:9421:2e58...–

Ovrscout
.NET › OutOfMemory v GUI v 32bit
30. 1. 2019   #382958

#30 Ovrscout
ještě v souvislosti s memory leaky můžeš skusit CLR profiler , ale zatím jsem to moc nepoužíval.

Ovrscout
.NET › OutOfMemory v GUI v 32bit
30. 1. 2019   #382957

#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

Ovrscout
.NET › OutOfMemory v GUI v 32bit
30. 1. 2019   #382955

#25 Ovrscout
ehm, tedka koukam ze i primo FileStream ma konstruktory co umi bufferovani nastavit (dokonce i asynchroni). Tak muzes skusit primo FileStream.  

Ovrscout
.NET › OutOfMemory v GUI v 32bit
30. 1. 2019   #382952

#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.

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý