Osztályú outofmemoryexception (rendszer)

Meg kell csinálni a következők a hiba kijavítására:

Cseréljük ki a hívás StringBuilder. StringBuilder (Int32, Int32) konstruktor hívás bármilyen egyéb StringBuilder kivitelező túlterhelés. Maximális kapacitás a StringBuilder tárgy lesz állítva az alapértelmezett, ami Int32. MAXVALUE.

Hívjon StringBuilder. StringBuilder (Int32, Int32) konstruktor maxCapacity érték, amely elég nagy ahhoz, hogy elférjen az összes kiterjesztés StringBuilder kifogást.

Az alkalmazás fut a 32 bites folyamat.

32-bites folyamatok kiosztani több, mint 2 GB virtuális felhasználói módban 32 bites rendszer és 4 GB memória virtuális felhasználói módban 64 bites rendszerek. Ez megnehezítheti a CLR kiosztani elég összefüggő memória allokáció egy nagy, ha szükséges. Ezzel a 64-bites folyamatok kiosztani akár 8 TB virtuális memória. Ennek kijavításához kivétel újrafordítani az alkalmazást 64 bites platformokon. Tájékoztatás a tervezett platform-specifikus Visual Studio cm. A How. Beállítása a projekt egy adott platformon.

A függelékben van szivárgás menedzselhető források

Bár a szemétgyűjtő visszaigényelhetik a memória mennyiségét a kezelt fajta, akkor nem sikerül lefoglalt memóriát menedzselt erőforrásokat, mint a leírások az operációs rendszer (beleértve a mutatókat fájlok memórialeképezésesek fájlokat, csövek, kulcsok, és a készenléti leírásokat) és emlékek kiosztott közvetlenül a Windows API hívások, illetve a hívások a memória kiosztás funkciók, mint a malloc. Típusai, amelyek a felügyelt források végre IDisposable felület.

Ha olyan típusú, amely felügyelt források, győződjön meg arról, hogy ez az úgynevezett IDisposable. Dobja eljárás befejezése után a használatát. (Bizonyos is végrehajtja a következő módszer, ugyanaz a funkciója megsemmisíteni módszer.) További információ. Lásd: Tárgyak, amelyek megvalósítják IDisposable.

Ha létrehoz egy típus, amely felügyelt források, győződjön meg arról, hogy a végrehajtás megszüntetése, és feltéve, befejezése a módszert, ha megfelelő sablont. További információért lásd. Hogyan törlése Sablon. Végrehajtására megsemmisíteni módszer. és az objektum. Véglegesítése szakaszok.

Próbál létrehozni egy nagy tömb 64 ​​bites folyamat.

Alapértelmezésben a közös nyelvi futtatókörnyezet nem teszi lehetővé az egyes tárgyak, amelyek nagyobbak, mint 2 GB. Ennek felülírásához viselkedést, a konfigurációs fájl opciót lehet használni, hogy kapcsolja be a tömb, a teljes mérete meghaladja a 2 GB.

Ön dolgozik igen nagy adathalmazok (pl tömbök, gyűjtemények vagy adatsor az adatbázis) a memóriában.

Ha az adatok szerkezetek vagy adathalmazok, amelyek a memóriában tárolt, növeli annak érdekében, hogy a közös nyelvi futtatókörnyezet nem lesz képes kiosztani elég nekik folytonos memóriát, az eredmény kapnak kivételt OutOfMemoryException.

Annak megakadályozása érdekében OutOfMemoryException kivételével, meg kell változtatni az alkalmazás, hogy kevesebb adatot a memóriában, vagy az adatok felosztva, ami kevesebb memória kiosztás műveletet. Például:

Kézhezvételét követően az adatokat az adatbázisból és az alkalmazás szűrés csökkenti minimálisra a feldolgozás a szerveren, változtatási kérelmek visszatérni csak egy részhalmaza az adatok az alkalmazáshoz szükséges. Amikor foglalkozó nagy asztal, több kérés szinte mindig hatékonyabb, mint a kitermelése minden adatot egy táblázatban, majd a feldolgozás.

Amikor futtatja a lekérdezést, amely dinamikusan a felhasználó által létrehozott kell arról, hogy a korlátozott számú visszaadott rekordok a lekérdezés.

Ha nagy tömbök, illetve az egyéb tárgyak, amelyek eredményeit méretű OutOfMemoryException kivétel változtatni az alkalmazás fut a adathalmaz, hanem dolgozik az egészet egyszerre.

A következő példa egy tömbbel tér vissza amely 200 millió lebegőpontos értékek, majd kiszámítja az átlagos. Kimeneti példa azt mutatja, hogy, mint a példában teljes mátrixban a memóriában tároljuk, mielőtt kiszámítja egy átlagos OutOfMemoryException - kivétel.

Többször kombinálásával nagy szálakat.

Mivel a sorok megváltoztathatatlan mindegyike kombinálható művelet sor létrehoz egy új sort. Rövid sorok, vagy kis számú kombinációs műveletek hatása elhanyagolható. Ahhoz azonban, hogy nagy vagy nagy számú sorok kombinációs műveletek összefűzés eredményezhet nagyszámú memóriafoglalási műveletek és memória töredezettség, az alacsony termelékenység, és ezért, OutOfMemoryException kivételek.

Kombinálásával nagy húrok, vagy végrehajtja a nagyszámú egyesítési műveletek, a helyett használható StringBuilder osztály karakterlánc osztály. Befejezése után a feldolgozó vonal kell átalakítani a karakterláncot StringBuilder fokon hívja StringBuilder. ToString eljárás.

Megszilárdítása nagyszámú objektumok memóriában.

Becslés készült, hogy minden objektum kell rögzíteni.

Győződjön meg róla, hogy minden objektum laza a lehető leghamarabb.

Győződjön meg arról, hogy minden alkalommal, amikor hívást GCHandle funkciót. Alloc (Object, GCHandleType) módszer PIN kód memória van egy megfelelő hívást GCHandle. Ingyenes módszer, hogy törölje ezt a konszolidációt.

OutOfMemoryException használja HRESULT COR_E_OUTOFMEMORY. amelynek értéke 0x8007000E.

A lista első ingatlan értékének egy példánya OutOfMemoryException. § OutOfMemoryException konstruktőrök.

Kapcsolódó cikkek