Diskuze: System.OutOfMemoryException
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 17 zpráv z 17.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
"OutOfMemory" již podle názvu znamená, že ti došla paměť Zřejmě tam cpeš nějaká velká data v cyklu.
No tak to mi doslo ze to bude nieco s pamatou ... necakal som ze par stringov ju dokaze takto zahltit
Záleží jak to máš napsané. C# paměť uvolňuje sám, ale jsou situace, kdy to nedělá. Pokud máš server, kde ti stále jede jedna metoda, tak je možné, že po ní neuklidí, protože vlastně nikdy neskončí. Můžeš zkusit občas zavolat GC.Collect(), tím explicitně zavoláš mechanismus, který paměť uvolňuje. Dokud sem ale nevložíš kód, tak na to těžko přijdeme.
Mam takyto kod spusteny vo vlakne
while(!work)
{
if (!communication.receivedString.Contains("retazec1"))
{
if (communication.receivedString.Contains("retazec2"))
{
string_receive.Add(communication.receivedString);
}
}
else
{
work=true;
}
}
Uzmi to nevypisuje tu vynimku pretoze som tam pridal jednu podmienku a filtrujem data ale problem mam v tomto tu:
string_receive.Add(communication.receivedString);
vlastne pridavam staticku premennu do Listu<> ale mam pocit ze tam zapise stale tu istu hodnotu do celeho Listu
Jak jsem psal, pokud tam pořád cpeš další a další data a nikdy je nemažeš, tak ti togicky někdy dojde paměť.
Ale prečo mi to do Listu neuklada z tej premennej retazce ... treba vytvorit List<string []> ???
Protože tam cpeš statiku, tím tam vlastně nacpeš "odkaz" na ten text a jakmile ho změníš a chceš ho znovu uložit tak se změní všechny, protože všechny vedou k tomu jednomu
No ostane tam posledný uložený text mam pocit a neuloží tam všetky ako chcem. Nevieš mi poradit ako to spravit aby tam ukladalo normálne texty teda celé vety a aby som si mohol potom vytiahnut obsah ? teda chcel by som to takto aby ked dám string_receive[2] aby vypisalo vetu v tom poradi
Dokud sem nevložíš celý kód aplikace, tak ti těžko někdo poradí.
Ved kod som vlozil hore ... akurat to mi nejde tak si myslim zeby to malo stacit dokonca si to spustam vo vlakne ... nepotrebujem nic len ukladat data konretne typu string do Listu<string> ale problem je v tom ze sa mi tam asi neukladaju spravne ... tie data su vety ktore maju co ja viem 6 a viac slov a potrebujem si do Listu<> ulozti dajme tomu na prve miesto prvu vetu a tak dalej a potom si to vybrat a zobrazit celu vetu
Sice jsi ten kód dal nahoru, ale ne to jak získáš 'communication.receivedString'
To je premenná v triede communication ktorá je verejná a statická a do tejto premennej sa ukladajú prijaté dáta cez UDP protkol. Táto premenná sa dynamicky mení z každými prijatími dátama v cykle while. A volám si ju takto communication.receivedString
Zobrazeno 17 zpráv z 17.