Trebuie să faceți una dintre următoarele pentru a corecta eroarea:
Înlocuiți StringBuilder de apel. StringBuilder (int32, int32) apel constructor prin orice alt constructor de suprasarcină StringBuilder. Capacitatea maximă a obiectului StringBuilder va fi setat la valoarea implicită, care este int32. MAXVALUE.
Call StringBuilder. StringBuilder (int32, int32) Valoarea maxCapacity constructor, care este suficient de mare pentru a se potrivi toate extensiile StringBuilder obiecta.
Aplicația dvs. rulează ca un proces pe 32 de biți.
procese pe 32 de biți pot aloca mai mult de 2 GB modul de utilizator virtual sistem pe 32 de biți și 4 GB de memorie modul utilizator virtual pentru sistemele pe 64 de biți. Acest lucru se poate face mai dificil pentru a aloca CLR suficientă memorie contiguă, alocarea unei mari, dacă este necesar. Pe de altă parte o procese pe 64 de biți poate aloca până la 8 TB memorie virtuală. Pentru a corecta această excepție, recompilați aplicația pentru platformele pe 64 de biți. Informații privind platforma specifică destinată Visual Studio cm. În modul în care. Configurarea proiectului pentru o anumită platformă.
În anexă există o scurgere de resurse negestionată
Deși colectorul de gunoi poate recupera memoria alocată pentru tipurile gestionate, acesta nu gestionează memorie alocată pentru resurse negestionate, cum ar fi descriptori ai sistemului de operare (inclusiv indicii la fișiere, fișiere de memorie mapate, conducte, chei de registry, și descriptorii de așteptare) și memoriile alocate în mod direct, folosind apeluri API windows sau apeluri la funcțiile de alocare de memorie, cum ar fi malloc. Tipurile care utilizează resurse negestionate pentru a pune în aplicare interfață IDisposable.
Dacă utilizați un tip care utilizează resurse negestionate, trebuie să vă asigurați că acesta este numit IDisposable. Aruncați metoda după terminarea utilizării sale. (Unele tipuri pune în aplicare, de asemenea, Închidere metodă, identică metoda funcției se elimina.) Pentru mai multe informații. A se vedea, folosind obiecte care implementeaza IDisposable.
Dacă creați un tip care utilizează resurse negestionate, asigurați-vă că punerea în aplicare a eliminării și cu condiția ca metoda de finalizare, dacă este cazul șablon. Pentru mai multe informații, consultați. Cum de a șterge șablon. Implementarea unei metode se elimina. si obiect. Definitivarea secțiuni.
Voi încercați să creați o gamă largă de proces pe 64 de biți.
În mod implicit, Common Language Runtime nu permite obiecte individuale care sunt mai mari de 2 GB. Pentru a trece peste acest comportament implicit, opțiunea de fișier de configurare poate fi folosit pentru a porni matrice, dimensiunea totală depășește 2 GB.
Tu lucrează cu seturi de date foarte mari (de exemplu, tablouri, colecții sau seturi de date pentru baza de date) în memorie.
În cazul în care structurile de date sau seturile de date care sunt stocate în memorie, va crește, astfel încât comune language runtime nu va fi în măsură să aloce suficient pentru ei de memorie contiguă, rezultatul va fi acordat o OutOfMemoryException excepție.
Pentru a preveni OutOfMemoryException excepție, trebuie să modificați aplicația astfel încât mai puține date din memorie sau datele sunt împărțite în segmente, care necesită mai puține operații de alocare de memorie. De exemplu:
La primirea datelor de la filtrarea bazei de date și de aplicare pentru a reduce la minimum procesarea pe server, cererilor de schimbare pentru a reveni doar un subset de date necesare pentru aplicația dumneavoastră. Atunci când se ocupă cu mese mari, mai multe solicitări sunt aproape întotdeauna mai eficace decât extragerea tuturor datelor într-un tabel și apoi prelucrarea.
Când executați o interogare care este creat dinamic de către utilizatorul trebuie să se asigure că numărul limitat de înregistrări returnate de interogare.
Dacă utilizați matrice mari sau colecții de alte obiecte, ale căror rezultate excepție dimensiune OutOfMemoryException, modificați aplicația pentru a rula în subseturi de date, mai degrabă decât de lucru cu totul dintr-o dată.
Următorul exemplu returnează o matrice care este format din 200 de milioane de valori în virgulă mobilă, iar apoi calculează media acestora. Exemplu de ieșire arată că, la fel ca în exemplul întreaga matrice este stocată în memorie înainte de a calcula o OutOfMemoryException medie - o excepție.
De mai multe ori combinarea siruri de caractere mari.
Deoarece rândurile sunt imuabile, fiecare linie de operații de combinare creează o nouă linie. Pentru linii scurte, sau pentru un număr mic de operații care combină efectul este neglijabil. Cu toate acestea, pentru a mari sau a unui număr mare de rânduri care combină operațiunile de concatenare poate duce la un număr mare de operațiuni de alocare de memorie și fragmentarea memoriei, productivitatea scăzută și poate, excepții OutOfMemoryException.
Prin combinarea siruri de caractere mari sau de a efectua un număr mare de operații de îmbinare, care urmează să fie utilizate în locul clasa StringBuilder clasa String. După finalizarea liniei de procesare pentru a converti un șir de caractere exemplu StringBuilder prin apelarea StringBuilder. Metoda ToString.
Consolidați un număr mare de obiecte în memorie.
Estimarea se face dacă fiecare obiect trebuie să fie reparat.
Asigurați-vă că fiecare obiect este slăbit, cât mai curând posibil.
Asigurați-vă că de fiecare dată când apelați funcția GCHandle. Alloc (Object, GCHandleType) memorie metoda cod PIN are un GCHandle apel corespunzător. Metoda gratuit pentru a anula această consolidare de memorie.
OutOfMemoryException utilizează HRESULT COR_E_OUTOFMEMORY. care are o valoare 0x8007000E.
Lista valorilor de proprietate inițiale pentru o instanță de OutOfMemoryException. constructori Secțiunea OutOfMemoryException.