| Subiectul anterior :: Subiectul următor |
| Autor |
Mesaj |
sonycservice Junior
Data înscrierii: 21/Dec/2009 Mesaje: 7
|
Trimis: Lun Dec 21, 2009 6:55 am Titlul subiectului: Run-time error '7': Out of memory |
|
|
Lucrez in win xp sp2 cu visual basic 6
Programul are o cateva sute de forms-uri (aprox. 300) si in fiecare form sunt vreo 200 de textbox-uri
Totul merge bine pana incep sa calculez sirul de textbox-uri ex( form1.x1 + form2.x2 * form3.x3 etc)
Initial am creat programul la o scara mai redusa (aprox 50 de forms-uri cu vreo 20 de textbox-uri in fiecare) si mergea perfect
Acum la varianta completa cand incep sa calculez valori din textbox-uri i-mi da eroarea
Run-time error '7': Out of memory
Am rulat programul pe un alt sistem (un laptop) si acolo primesc eroarea asta
System Error &H80070486 (-2147023738).
Abia dupa ce dau ok la asta apare Out of memory
Daca este posibila o solutie care sa nu necesite schimbarea sistemului de operare sau a limbajului de programare
Multumesc |
|
| Sus |
|
 |
Grunt Avansat

Data înscrierii: 18/Sep/2008 Mesaje: 268 Locație: Unde ma trezesc dimineata
|
Trimis: Lun Dec 21, 2009 12:19 pm Titlul subiectului: |
|
|
Din cate am gasit eu pe net, HRESULT 0x80070486 corespunde erorii ERROR_NO_MORE_USER_HANDLES, "The current process has used all of its system allowance of handles for Window Manager objects".
Asta inseamna ca aplicatia ta a ajuns la limita de handle-uri permisa de sistemul de operare. Nu sunt sigur daca limita poate fi marita, dar solutia ta e sa nu creezi toate form-urile odata, ci doar atunci cand ai nevoie de ele, si sa le distrugi dupa ce nu mai ai nevoie.
EDIT. Uite ca se poate, dar numai pana la 18.000 - http://msdn.microsoft.com/en-u.....85%29.aspx _________________ Software is pretty much like cathedrals: first we build them, then we pray.
| Citat: | | "Robustă înseamnă de încredere . Nici un limbaj de programare nu asigură într-adevăr încrederea."? Suna ca o reclama mascata la tampon. |
|
|
| Sus |
|
 |
Razor23 Invatacel
Data înscrierii: 16/Apr/2009 Mesaje: 65
|
Trimis: Lun Dec 21, 2009 12:21 pm Titlul subiectului: |
|
|
mmmmm, de obicei mi se intampla eroarea asta atunci cand nu initializez varibilele. Am obsevat ca de obici daca nu initializez o variabila ea primeste automat valoarea maxima a domeniului de definitie. Banuiesc ca e ce incearca sa iti spuna eroarea la laptop unde este prezent -27... ce parea a fi limita inferioara a domeniului intreg. In lipsa de alte detalii.... _________________ Beware! Addictive game ahead!
http://catalinnegru.evony.com |
|
| Sus |
|
 |
sonycservice Junior
Data înscrierii: 21/Dec/2009 Mesaje: 7
|
Trimis: Lun Dec 21, 2009 1:37 pm Titlul subiectului: |
|
|
| Grunt a scris: | | Uite ca se poate, dar numai pana la 18.000 |
Initial am incercat o gramada de variante, sigura care a mers a fost cand am inlocuit
form1.x1 = form2.a4 + form2.x2 * form3.x3 + form5.x2 .... etc
cu
form1.x1 = 2 + 3 * 5 + 0.2 ..... etc
Am modificat la 18000 si nici o scimbare
Programul se incarca ruleaza dar cand il pun sa-mi calculeze da eroare
Daca rulez direct calculul apuca sa faca o bucata mai mare din cod
Daca activez timer-ul care face si el alte calcule intre timp... si apoi rulez calculul primesc eroarea mult mai repede
Spun asta pt ca vad la ce linie a codului da eroarea la debug si asta variaza, in functie de ce il pun sa faca inainte
E clar ca se tremina o bucata de memorie care i-a fost alocata
Chiar si modificand aia la 18000 eraorea apare exact la aceleasi linii ca inainte |
|
| Sus |
|
 |
sonycservice Junior
Data înscrierii: 21/Dec/2009 Mesaje: 7
|
Trimis: Lun Dec 21, 2009 1:44 pm Titlul subiectului: |
|
|
| Razor23 a scris: | | de obicei mi se intampla eroarea asta atunci cand nu initializez varibilele |
Nu prea folosesc variabile
Folosesc textbox-uri pt ca am nevoie de date din o gramada de parti si fiecare form care il incarc am nevoie sa stea incarcat
Si am incarcat si varianta de Unload Form si Form = Nothing la cateva care mi se parea ca ma pot lipsi pt moment de ele sa vad daca apare vreo schimbare, dar eroarea o primeam exact la aceasi linie de cod ca si inainte
Si chiar daca folosesc variabile, nu mi se pare ok sa incep sa definesc cateva sute de variabile de care am nevoie la un calcul
Am incercat si asta... la o bucata din calcul sa vad daca ajuta cu ceva sa lucrez cu variabile dar din pacate nu vad nici o imbunatatire pt ca eroarea apare exact la aceeasi linie de cod la care apare pur si simplu calculand in textbox-uri
Si am impartit calculul in cat mai multe linii sa vad clar daca apare vreo imbunatatire |
|
| Sus |
|
 |
sonycservice Junior
Data înscrierii: 21/Dec/2009 Mesaje: 7
|
|
| Sus |
|
 |
arjuna Coder
Data înscrierii: 02/Dec/2007 Mesaje: 110 Locație: Cluj
|
Trimis: Mar Dec 22, 2009 3:07 pm Titlul subiectului: |
|
|
| sonycservice a scris: |
Folosesc textbox-uri pt ca am nevoie de date din o gramada de parti si fiecare form care il incarc am nevoie sa stea incarcat
| Ciudat - deci user-ul aplicatiei lucreaza simultan pe toate acele form-uri ?
In mod normal intr-o aplicatie obisnuita user-ul interactioneaza cu cel mult 1-2 form-uri (ferestre) la un moment dat (main app. window si 1-2 ferestre/form-uri eventual), iar restul sunt create si activate doar cand e nevoie.
Pentru a nu "pierde" datele introduse in diverse form-uri de-a lungul timpului, cand user-ul salveaza modificarile dintr-un form (apasand Save sau Ok), poti salva modificarile in memorie, sau, mai bine, intr-o baza de date, dupa care inchizi form-ul respectiv si setezi pe null toate eventuale referinte spre acesta.
O fereastra cu diverse controale pe ea (textboxes etc.) e o resursa destul de "scumpa" in ce priveste consumul de memorie - un handle e alocat nu doar pentru fereastra in sine, ci si pentru fiecare textbox, dropdown, radio button etc. (care si el e o fereastra din punctul de vedere al sistemului de operare). |
|
| Sus |
|
 |
sonycservice Junior
Data înscrierii: 21/Dec/2009 Mesaje: 7
|
Trimis: Mie Dec 23, 2009 8:20 am Titlul subiectului: |
|
|
Da programul foloseste toate formurile, face o gramada de alte calcule
Termina cu o bucata si incepe cu alta
E imens proiectul, ce am pus eu aici e foarte putin din el
Iar codul este direct proportional cu numarul de textbox-uri din toate formurile
De asta caut solutii cat mai simple
Am incercat sa lucrez cu DataGrid din visual basic si e praf
Il pun sa calculeze valori din 104 locatii,fiecare locatie avand valoarea 1
Rezultatul trebuie sa dea 104 am dat si print la rezutat sa vad ce se intampla la fiecare loop
1, 2, 3.... apoi paraca devine prost si incepe... 21, 22, 22, 22, 22, 22
Ca si cum de la 23 la 104 fiecare casuta ar avea valoare 0
Am pus aici daca vreti sa va convingeti
www.sonyxproject.com/sonycservice2.rar
In fine am gasit solutia si pt calculul direct din textbox-uri
Problema e ca dupa ce dau unload la o gramada din ele trebuie sa le incarc pt urmatoarele calcule
Si nu se salveaza nimic niciunde
Cand le dau load au aceleasi valori ca si cand incarc programul prima oara
Se poate cumva salva form-ul cu toate valorile din el?
Ca apoi cand ii dau load sa aiba valorile care le avea cand i-am dat unload
Nu as vrea sa salvez chiar toate datele temporare prin fisiere si sa le incarc de fiecare data
Ar fi pierdere de timp si de procesor |
|
| Sus |
|
 |
arjuna Coder
Data înscrierii: 02/Dec/2007 Mesaje: 110 Locație: Cluj
|
Trimis: Mie Dec 23, 2009 10:29 am Titlul subiectului: |
|
|
| sonycservice a scris: | Da programul foloseste toate formurile, face o gramada de alte calcule
| Eu altceva intrebam - user-ul ('omluletzul') care va folosi aplicatia, nu programul, lucreaza "simultan" pe toate acele form-uri ? In sensul ca toate sunt afisate/vizibile deodata si user-ul interactioneaza cu ele aleator?
DataGrid-ul, formele etc. sunt gandite doar pentru a fi afisate, user-ul sa introduca niste date un timp limitat, dupa care business layer-ul aplicatiei sa citeasca acele date intr-o structura proprie in memorie sau in baza de date - in momentul in care incerci sa le folosesti pentru a "stoca" date sau a face prelucrari, ai problemele care tocmai le-ai descoperit..
Nici o componenta obisnuita de tip grid nu e gandita si nu e optimizata pentru a fi folosita precum o foaie de calcul Excel - exista firme care produc si asa ceva, dar sunt componente specializate, si au un pret. |
|
| Sus |
|
 |
sonycservice Junior
Data înscrierii: 21/Dec/2009 Mesaje: 7
|
Trimis: Mie Dec 23, 2009 11:23 am Titlul subiectului: |
|
|
Omuletul nu interactioneaza cu astea, sunt invizibile pt el
El are o alta interfata unde doar da click-uri si face setari
Dar cam orice click va da el, automat programul va incepe si va folosi cam tot ce are |
|
| Sus |
|
 |
arjuna Coder
Data înscrierii: 02/Dec/2007 Mesaje: 110 Locație: Cluj
|
Trimis: Mie Dec 23, 2009 4:08 pm Titlul subiectului: |
|
|
| Daca acele form-uri (ferestre) sunt tot timpul invizibile si nu sunt folosite de user, e ceva foarte ciudat in aplicatia aia - doar tu stii ce vrei sa faci acolo.. |
|
| Sus |
|
 |
ignatandrei Avansat

Data înscrierii: 24/Ian/2006 Mesaje: 344 Locație: Bucuresti
|
Trimis: Mie Dec 23, 2009 4:57 pm Titlul subiectului: |
|
|
| sonycservice a scris: | Omuletul nu interactioneaza cu astea, sunt invizibile pt el
El are o alta interfata unde doar da click-uri si face setari
Dar cam orice click va da el, automat programul va incepe si va folosi cam tot ce are |
De ce nu folosesti clase in loc de form-uri pentru a tine minte acele setari ? _________________ Andrei Ignat
http://serviciipeweb.ro/iafblog |
|
| Sus |
|
 |
sonycservice Junior
Data înscrierii: 21/Dec/2009 Mesaje: 7
|
Trimis: Mar Dec 29, 2009 9:27 pm Titlul subiectului: |
|
|
Am rezolvat cu DataGrid, l-am facut sa mearga pana la urma
E foarte ok in felul asta pt ca toate datele sunt salvate tot timpul
Am redus proiectul de la aproape 500 de form-uri la 20
Este bine de stiut ca un proiect vb poate sa aiba maxim 40 de form-uri active
Multumesc pt support |
|
| Sus |
|
 |
ignatandrei Avansat

Data înscrierii: 24/Ian/2006 Mesaje: 344 Locație: Bucuresti
|
Trimis: Mar Dec 29, 2009 11:22 pm Titlul subiectului: |
|
|
| sonycservice a scris: | Am rezolvat cu DataGrid, l-am facut sa mearga pana la urma
E foarte ok in felul asta pt ca toate datele sunt salvate tot timpul
Am redus proiectul de la aproape 500 de form-uri la 20
Este bine de stiut ca un proiect vb poate sa aiba maxim 40 de form-uri active
Multumesc pt support |
Sonyc
Am lucrat de la VB3 la VB6 ... si nu am avut nevoie de mai mult de 5 forme active deodata.
Studiaza un pic clasele din VB6 - sunt ca formele din VB6, dar fara interfata grafica - si iti salveaza la fel datele.
De ex., daca ai un frmStudent cu 2 textbox - txtNume si txtPrenume - poti inlocui cu
Public class clsStudent
Public Nume as string
Public Prenume as String
End class
iar acolo unde foloseai frmStudent poti inlocui cu o variabila(globala sau nu)
dim Student as clsStudent
pe care o initializezi la inceput
Set Student =new clsStudent
La un moment dat va trebui sa treci pe .NET proiectul - si o sa ai dificultati... _________________ Andrei Ignat
http://serviciipeweb.ro/iafblog |
|
| Sus |
|
 |
|