Newsgroup: it.comp.lang.visual-basic
Titolo: Gestire una matrice moooolto enorme ...

Ciao a tutti.
Dovrei gestire una matrice a 2 dimensioni dove andrebbero a finire ogni
numero che compone ogni colonna di un qualsiasi sistema al superenalotto.
Ora, siccome al superenalotto con 90 numeri giocati si può arrivare a
sviluppare fino a circa 622 milioni di colonne, c'è il problema che, già
quando gioco 60 numeri in un P II 350 Mhz con 64 mb Ram ad un certo punto il
sistema mi dà il msg di memoria esaurita.
Ho provato a gestire manualmente la memoria virtuale, aumentandola, ma senza
miglioramenti apprezzabili.
Ho provato a salvare le colonne direttamente su file ma il programma diventa
talmente lento da essere improponibile.
Almeno che non mi abbiano informato male, sò che in qualche linguaggio, ad
esempio in C, si possono dichiarare variabili di tipo Bit, mentre in VB il
tipo più piccolo è il tipo Byte, ed è quello che ho usato.
Allora chiedo: c'è la possibilità in VB di dichiarare le variabili in modo
da occupare meno del byte, che ne sò, tramite qualche API o ..... boh?! -))
Oppure avete per caso qualche dritta da darmi riguardo a come gestire questa
matrice?
Vi ringrazio a tutti.
Max

Credo che l'unica e migliore soluzione sia quella di scrivere una DLL in C,
e far svolgere l'ingrato compito a illa...;-)
Oppure sarebbe necessario ristrutturare il prog in modo da avere più matrici
di dimensioni ridotte, però non mi sbilancio perchè sinceramente non ho ben
capito con che criterio i dati vengano caricati nella matrice.
Berets

di dimensioni ridotte, perň non mi sbilancio perchč sinceramente non ho ben


 da occupare meno del byte, che ne sò, tramite qualche API o ..... boh?! -))
Potresti memorizzare più di una colonna per byte, utilizzando gli operatori
logici And e Or e qualche calcoletto per recuperare l'informazione. Se ti
occorresse un solo bit per colonna potresti disporre di uno spazio 32 volte
maggiore... beh, sempre in teoria. Fa' un po' di prove utiizzando TaskManager
per controllare la memoria occupata dopo i dimensionamenti.
Spero di esserti stato utile
Flavio Ronco
f.ronco@*NonMiServeNiente*
flashnet.it
http:\\
www.geocities.com
\Paris\3461\
-------------------------------------------------------------
"Dio ha uno screensaver. Speriamo che non tocchi il mouse..."


Cosa?
Explain, please...
Need more infos...
Dove l'hai letto?
Puoi darmi indicazioni precise sulla fonte (URL, pagina, ???)
Nell'help di VB5, "Riepilogo dei tipi di dati" vengono elencati tutti i tipi
disponibili e la loro dimensione in bytes... Byte = 1 byte
(c'e' effettivamente scritto "spazio su disco", non in memoria... il che fa
pensare...)
--
Roal Zanazzi
z...@iol.it


Chiedo venia... ho esplicitamente chiesto "qualcuno mi corregga se sbaglio"
proprio perché si trattava di una informazione da verificare. Il dato sicuro è
quello sulla velocità di trattamento dei dati Byte, Integer e Long Integer, di
cui si può trovare documentazione sia su MSDN di gennaio '98 in un capitolo di
"Advanced VisualBasic 5", che nel manuale di VB5, pag.781. Ricordavo comunque
differenze più rimarchevoli, non so per quale motivo. Non ci sono, in questi
articoli, dati sulla velocità di trattamento dei tipi Byte, ma sono convinto di
averli letti da qualche parte. Cercherò.
Sull'occupazione di memoria, farò dei test, poiché quel dubbio sulla lunghezza
degli Integer mi deriva da un paragrafo di Murray-Pappas, "Il Manuale del Visual
C++", volume 1, pag 115 (e in altri punti), in cui si dice che il compilatore MS
assegna 32 bit agli interi, sotto Win95 e NT. Si intende, credo, gli Int, gli
Short Int e i Long Int. Ho sospeso lo studio del C++ da tempo, per ragioni di
lavoro, e mi era rimasto questo dubbio, che ho impulsivamente applicato (ma con
riserva) anche in VB.
Però sarei curioso di vedere (col Task manager di NT) come si comporta un
    Dim lLongs (100000) as Long
rispetto a un
    Dim iIntegers (1 To 100000) as Integer
o rispetto a
    Dim bytBytes (1 To 100000) as Byte
Facevo prima a farlo che a dirlo...
Piuttosto, relativamente al problema originario: credo che dichiarare una
matrice Long e utilizzare i suoi 4 Bytes bit per bit con operazioni logiche non
sia un'idea malvagia. Solo un po' lenta e macchinosa. Meglio che niente :-)
Flavio Ronco
--
--------------------------------
/DECOMPILE. Before it's too late
--------------------------------



Questa e' una soluzione che ho usato una volta in C.
Chiaramente in C le operazioni bit-wise sono piu' veloci... ma dovrebbe
funzionare comunque.
--
Roal Zanazzi
z...@iol.it

 ...circa...
Senza il circa! Bastava provare. Ci voleva solo lo stimolo :-)
Il guaio di essere autodidatta, è che i dubbi banali nessuno te li leva finché
per te non diventa necessaria la verifica.
In compenso diventi in gamba nella fusione fredda organizzata in mansarde di
media superficie.
Saluti
Flavio Ronco
