Newsgroup: it.comp.lang.visual-basic
Titolo: Non più di 9500 CreateCompatibleBitmap

Intorno ai 9500 il programma dice memoria esaurita, ma quale memoria? Forse 
c'è un limite sul numero delle bitmap?
    For i = 1 To 10000
      k = CreateCompatibleBitmap(Me.hDC, 10, 10)
    Next
 grazie per l'attenzione
 Walter



Hai provato col task manager a leggere quanti oggetti GDI e quanti
handles sono aperti?
Windows NT e Windows 2000 dovrebbero avere un limite massimo di
0x00004000 (16384) oggetti GDI. In ogni caso, il sistema dovrebbe
cominciare a destabilizzarsi un bel po' prima.
Nel registro di windows 2000, per esempio, nella chiave
"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Windows"
c'e' la DWORD GDIProcessHandleQuota che sul mio pc portatile e'
impostata a 0x00002710 (10000), cosi' come USERProcessHandleQuota.
Potresti vedere cosa succederebbe se lo alzassi a 0x00003000 (12288),
per esempio.
-- 
ciao, hal

    Next
beh, il limite è fisico: ram.
presumo che il codice non sia completo, comunque se non rilasci la
memoria allocata dalla bmp, fai presto ad esaurirla...
Ciao,
Moreno
-- 
sirri at morenosoft dot com
Moreno Sirri VB Site - 
http://www.msvbsite.net
---------------------------------------------------------------------------
Le risposte alle tue domande le trovi sul Sito Comune di questo NewsGroup:
 
http://www.it-lang-vb.net
---------------------------------------------------------------------------

impostata a 0x00002710 (10000), cosi' come USERProcessHandleQuota.
mmm... interesting... grazie Hal


mmm... interesting... grazie Hal
Di niente: quando si tratta di hackare il sistema io mi diverto sempre
un mondo :-)
-- 
ciao, hal

 per esempio.
Col task manager particamente non si vede differenza dalla creazione 
della prima fino alla 9500esima quando si ferma il vb.
Ovviamente non è un problema di memoria (per Moreno) 10.000 da 10x10 non 
occupano neanche 4Mb.
Come ne esco ? io dovrei gestirne almeno 100.000 e con dimensioni molto 
variabili e comunque non posso andare a toccare i registri di sistema 
perchè non ho idea su quali macchine finisce il programma. Non posso 
rilasciarle perchè l'applicazione le dovrebbe riallocare nuovamente ed 
il motivo per cui ne ho bisogno è proprio di velocità nella 
rappresentazione.
C'è un modo per appoggiarle da qualche parte sulla memoria per 
ripristinarle poi in poco tempo? qualche idea ?
Grazie
Walter

rappresentazione.
Non sono un esperto di grafica, ma mi sembra che ci sia qualcosa che
non quadra. Che cosa devi visualizzare, effettivamente?
-- 
ciao, hal

 non quadra. Che cosa devi visualizzare, effettivamente?
Devo visualizzare in tempo reale una serie di immagini estratte da un 
database di oltre 100.000 in funzione di parametri scelti dall'operatore
grazie
walter

database di oltre 100.000 in funzione di parametri scelti dall'operatore
E gli vuoi mettere il database in RAM? 
Che database e'? Gira su un server o in locale? 
-- 
ciao, hal

 dall'operatore
Se le immagini sono statiche non vedo il problema a tirarle fuori dal
database.
Se hai problemi di velocità, metti il database su un disco RAM.
Se anche questa soluzione non basta, ce ne sarebbe una "laterale". Fai un
filmato coi 100.000 fotogrammi in cui metti le tue immagini, e usa il numero
di fotogramma come se fosse l'indice di un database ad accesso diretto. Se
il filmato è poco compresso ed ha tutti i fotogrammi come keyframe, la
velocità dovrebbe risultare ottima. Se ti serve tenere contemporaneamente
visualizzate alcune immagini, puoi farne il grab a video dal filmato e
metterle in una altra bitmap
Ciao
*Roby*