Programare.org - Programare Romaneasca: C/C++, PHP, Java, .NET, VB, Delphi, etc.
Run-time error '7': Out of memory

 
Crează un subiect nou   Răspunde la subiect    Pagina de start a forumului Programare.org -> Visual Basic
Subiectul anterior :: Subiectul următor  
Autor Mesaj
sonycservice
Junior


Data înscrierii: 21/Dec/2009
Mesaje: 7

MesajTrimis: Lun Dec 21, 2009 6:55 am    Titlul subiectului: Run-time error '7': Out of memory Răspunde cu citat (quote)

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
Vezi profilul utilizatorului Trimite mesaj privat Codul Yahoo Messenger
Grunt
Avansat


Data înscrierii: 18/Sep/2008
Mesaje: 268
Locație: Unde ma trezesc dimineata

MesajTrimis: Lun Dec 21, 2009 12:19 pm    Titlul subiectului: Răspunde cu citat (quote)

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
Vezi profilul utilizatorului Trimite mesaj privat Blog
Razor23
Invatacel


Data înscrierii: 16/Apr/2009
Mesaje: 65

MesajTrimis: Lun Dec 21, 2009 12:21 pm    Titlul subiectului: Răspunde cu citat (quote)

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
Vezi profilul utilizatorului Trimite mesaj privat
sonycservice
Junior


Data înscrierii: 21/Dec/2009
Mesaje: 7

MesajTrimis: Lun Dec 21, 2009 1:37 pm    Titlul subiectului: Răspunde cu citat (quote)

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
Vezi profilul utilizatorului Trimite mesaj privat Codul Yahoo Messenger
sonycservice
Junior


Data înscrierii: 21/Dec/2009
Mesaje: 7

MesajTrimis: Lun Dec 21, 2009 1:44 pm    Titlul subiectului: Răspunde cu citat (quote)

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
Vezi profilul utilizatorului Trimite mesaj privat Codul Yahoo Messenger
sonycservice
Junior


Data înscrierii: 21/Dec/2009
Mesaje: 7

MesajTrimis: Lun Dec 21, 2009 4:09 pm    Titlul subiectului: Răspunde cu citat (quote)

Aici este o varianta foarte simplificata care contine exact partea cu eroare

http://www.sonyxproject.com/sonycservice.rar
Sus
Vezi profilul utilizatorului Trimite mesaj privat Codul Yahoo Messenger
arjuna
Coder


Data înscrierii: 02/Dec/2007
Mesaje: 110
Locație: Cluj

MesajTrimis: Mar Dec 22, 2009 3:07 pm    Titlul subiectului: Răspunde cu citat (quote)

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
Vezi profilul utilizatorului Trimite mesaj privat
sonycservice
Junior


Data înscrierii: 21/Dec/2009
Mesaje: 7

MesajTrimis: Mie Dec 23, 2009 8:20 am    Titlul subiectului: Răspunde cu citat (quote)

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
Vezi profilul utilizatorului Trimite mesaj privat Codul Yahoo Messenger
arjuna
Coder


Data înscrierii: 02/Dec/2007
Mesaje: 110
Locație: Cluj

MesajTrimis: Mie Dec 23, 2009 10:29 am    Titlul subiectului: Răspunde cu citat (quote)

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
Vezi profilul utilizatorului Trimite mesaj privat
sonycservice
Junior


Data înscrierii: 21/Dec/2009
Mesaje: 7

MesajTrimis: Mie Dec 23, 2009 11:23 am    Titlul subiectului: Răspunde cu citat (quote)

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
Vezi profilul utilizatorului Trimite mesaj privat Codul Yahoo Messenger
arjuna
Coder


Data înscrierii: 02/Dec/2007
Mesaje: 110
Locație: Cluj

MesajTrimis: Mie Dec 23, 2009 4:08 pm    Titlul subiectului: Răspunde cu citat (quote)

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
Vezi profilul utilizatorului Trimite mesaj privat
ignatandrei
Avansat


Data înscrierii: 24/Ian/2006
Mesaje: 344
Locație: Bucuresti

MesajTrimis: Mie Dec 23, 2009 4:57 pm    Titlul subiectului: Răspunde cu citat (quote)

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
Vezi profilul utilizatorului Trimite mesaj privat Vizitează site-ul autorului Codul Yahoo Messenger
sonycservice
Junior


Data înscrierii: 21/Dec/2009
Mesaje: 7

MesajTrimis: Mar Dec 29, 2009 9:27 pm    Titlul subiectului: Răspunde cu citat (quote)

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
Vezi profilul utilizatorului Trimite mesaj privat Codul Yahoo Messenger
ignatandrei
Avansat


Data înscrierii: 24/Ian/2006
Mesaje: 344
Locație: Bucuresti

MesajTrimis: Mar Dec 29, 2009 11:22 pm    Titlul subiectului: Răspunde cu citat (quote)

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
Vezi profilul utilizatorului Trimite mesaj privat Vizitează site-ul autorului Codul Yahoo Messenger
Afișează mesajele pentru a le previzualiza:   
Crează un subiect nou   Răspunde la subiect    Pagina de start a forumului Programare.org -> Visual Basic Ora este GMT + 2 ore 
 
Pagina 1 din 1

 
Mergi direct la:  
Nu puteți crea un subiect nou în acest forum
Nu puteți răspunde în subiectele acestui forum
Nu puteți modifica mesajele proprii din acest forum
Nu puteți șterge mesajele proprii din acest forum
Nu puteți vota în chestionarele din acest forum
Pagini.info = Legaturi cu lumea - director web romanesc cu situri, webloguri & forumuri