Gestione array VB.net 2010

lunedì 27 febbraio 2012 - 11.57
Tag Elenco Tags  VB.NET  |  .NET 4.0  |  Windows Vista  |  Visual Studio Express  |  SQL Server 2008 R2  |  Office 2007  |  Opera

erot79 Profilo | Newbie

Salva a tutti, sono nuovo del forum e anche nel mondo vb.net. Premetto che ho usato VB 2008 e ora VB 2010. Dopo una serie di semplici applicazioni e prove di varia natura ora mi sto cimentando in qualcosa di più impegnativo a scopo didattico più che altro. In pratica sto provando a realizzare una applicazione FEM (Finite elements method) bidimensionale e sono a buon punto nel senso che ho già definito come realizzare gli elementi graficamente con oggetti shapecontainer che rappresentano praticamente i nodi (ovalshape) e le aste (lineshape). Ognuno di questi shape viene archiviato a runtime in un datatable e poi visualizzato in un datagridview che ne riporta ad esempio per le aste (lineshape) il numero del nodo iniziale e finale, le relative coordinate, la lunghezza della lineshape e così via. Contemporanemente ho recuperato e adattato una classe che mi permette di lavorare con le matrici nxn di qualsiasi dimensione per ottenere prodotti, determinanti, inverse e così via. Ora ho bisogno del vostro aiuto perchè devo realizzare la parte intermedia tra la definizione geometrica delle entità e l'elaborazione delle matrici che contengono i dati relativi a queste entità. Nello specifico vorrei prima capire quale sarebbe la miglior strategia da seguire, nel senso che io devo "mettere in memoria" per ogni nuovo elemento lineshape una matrice 6x6 ad esso associata che contiene una serie di informazioni di tipo numerico. Ognuna di queste matrici deve però avere un nome univoco (legato ad esempio al numero del nodo iniziale e finale e creato dinamicamente) in maniera che io possa richiamarne in qualsiasi momento i valori in essa contenuti. Quello che vi chiedo in prima istanza è perciò se nel mio caso è preferibile lavorare con gli array, oppure con dei dataset che contengono tanti datatable quante sono le lineshape o magari con dei file .txt che contengono e aggiornano i dati dinamicamente. Ringrazio per l'attenzione e spero di essere stato chiaro.

Dainesi Profilo | Senior Member

Tutto dipende da quante matrici devi memorizzare e quante risorse dispone la macchina che andrà ad eseguire il programma. Tieni conto che lavorando con i Dataset ogni dato (la tua Table personalizzata) è in memoria RAM mentre se adotti un approccio su stream fisico (txt o database) sarà su un supporto magnetico con una velocità di accesso decisamente inferiore (nell'ordine di uno o due grandezze!!).
Lavorare con gli array non è poi da scartare visto che .NET framework ha una classe specifica per le operazioni da svolgere su questi tipi di strutture.

Ricordati sempre che i colli di bottiglia sono quelli che promuovono o bocciano l'utilità di un buon programma. Se è lento ... chi lo userà?


.
Autore del libro sul FOREX, MetaTrader e creazione dei trading system http://ilmiolibro.kataweb.it/schedalibro.asp?id=115872

erot79 Profilo | Newbie

OK, grazie del consiglio!! Ero già orientato a usare dei datatable conformati a mò di matrice n righe x n colonne e il tuo consiglio conferma la bontà della mia scelta Ciò non toglie che mi rimane il problema che per operare con le matrici (intese in senso matematico) ho bisogno di usare gli array, e quindi passare i dati dal datatable all'array e viceversa. Ti faccio un esempio per capirci: immagina un datatable con 3 righe e 3 colonne, io voglio passare il contenuto della "cella" (0,0) nella posizione (0,0) dell'array e così via per gli altri nove valori, fare poi qualcosa con questo array (es. un prodotto di matrici piuttosto che un inversa o cose simili) per creare un nuovo array e poi salvare con analogo procedimento in un nuovo datatable. L'operazione che ho in mente è qualcosa di questo tipo:

For each datatable contenuto in miodataset
copia il valore contenuto nella cella (i,j) del primo datatable nella medesima posizione (i,j) di un array che chiamo a
...fai qualcosa con a per ottenere un nuovo array b
salva b in un nuovo datatable
next (fai la stessa cosa con tutti i datatable appartenenti a miodataset)

Credi sia fattibile in termini di codice? C'è un metodo più veloce o più corretto in termini di programmazione per fare la stessa cosa?
Considera che potrebbero esserci all'incirca 50 datatable

Grazie per l'attenzione che mi hai dedicato.

Dainesi Profilo | Senior Member

Se sono solo 50 matrici e la dimensione è solo bidimensionale allora vai pure sugli array senza scomodare ADO.NET. I cicli For annidati sono l'ideale per passare in rassegna i tuoi sistemi e operare velocemente per risolverli (ricordo che lo feci anni fa applicando la regola di Sarrus per risolvere degli Jacobiani ...).




.
Autore del libro sul FOREX, MetaTrader e creazione dei trading system http://ilmiolibro.kataweb.it/schedalibro.asp?id=115872
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5