+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Sdoppiamento struttura dati classe

  1. #1
    SebastianoFloridia non è in linea Scolaretto
    Post
    139

    Sdoppiamento struttura dati classe

    Salve ragazzi, ho una struttura dati di un oggetto che è diventato enorme.
    dopo 1200 elementi supera il limite da gestire 32 bit.

    Vorrei sdoppiare la struttura dati.
    Dividerli per dati e risultati.

    Esempio: Se la collection ASTE avrà 1156 elementi la parte sdoppiata dovrà avere 1156 elementi e tutte le chiavi coincidenti.

    Quale è la maniera più snella per sdoppiare la classe.
    LO scopo è solo quello di snellire le griglie e cicli vari:


    codice:
    ........
    public string SvincoloJ { get; set; }
            public string Tag { get; set; }
            public int Winkler { get; set; }
            public double KWinkler { get; set; }
            public string Colore { get; set; }
            public int TabellaVerifica { get; set; }
            public List<CaricoAsta> CarichiAsta = new List< CaricoAsta>();
            //public List<RisultatiAste> RisultatiAsta = new List<RisultatiAste>();
            public double[,,] ResAste= new double[50,11,8]; //risultati aste singola condizione
            public double[,] ResAsteSLDx = new double[11, 8]; //risultati aste singola caso sismico SLD X
            public double[,] ResAsteSLDy = new double[11, 8]; //risultati aste singola caso sismico SLD Y
            public double[,] ResAsteSLDz = new double[11, 8]; //risultati aste singola caso sismico SLD Z
            public double[,] ResAsteSLUx = new double[11, 8]; //risultati aste singola caso sismico SLU X
            public double[,] ResAsteSLUy = new double[11, 8]; //risultati aste singola caso sismico SLU Y
            public double[,] ResAsteSLUz = new double[11, 8]; //risultati aste singola caso sismico SLU Z
            public double[,,] ResAsteCmb = new double[100,11, 8]; // risultati aste combinati 
    
            public double[,,] DefAste = new double[50, 11, 6]; //risultati deformazioni aste singola condizione
            public double[,] DefAsteSLDx = new double[11, 8]; //risultati deformazioni aste singola caso sismico SLD X
            public double[,] DefAsteSLDy = new double[11, 8]; //risultati deformazioni aste singola caso sismico SLD Y
            public double[,] DefAsteSLDz = new double[11, 8]; //risultati deformazioni aste singola caso sismico SLD Z
            public double[,] DefAsteSLUx = new double[11, 8]; //risultati deformazioni aste singola caso sismico SLD X
            public double[,] DefAsteSLUy = new double[11, 8]; //risultati deformazioni aste singola caso sismico SLD Y
            public double[,] DefAsteSLUz = new double[11, 8]; //risultati deformazioni aste singola caso sismico SLD Z
            public double[,,] DefAsteCmb = new double[50, 11, 8]; // risultati deformazioni aste combinati
    Grazie
    Saluti
    Sebastiano Floridia

  2. #2
    L'avatar di _alka_
    _alka_ non è in linea Very Important Person
    Luogo
    Reggio Emilia
    Post
    1,157
    Quote Originariamente inviato da SebastianoFloridia Visualizza il messaggio
    Salve ragazzi, ho una struttura dati di un oggetto che è diventato enorme.
    dopo 1200 elementi supera il limite da gestire 32 bit.
    Però... complimenti!

    Quote Originariamente inviato da SebastianoFloridia Visualizza il messaggio
    Vorrei sdoppiare la struttura dati.
    Dividerli per dati e risultati.
    Per me è difficile dare una "risposta secca".

    Il principio - a mio avviso - deve essere il fatto che la classe non è un mero contenitore di dati di cui ne va codificata una mettendoci dentro tutto quello che si può.

    Ogni classe va intesa come modellazione di un'entità separata del problema, con le proprie informazioni (i campi e le proprietà) e i comportamenti (metodi).

    Se hai informazioni su un'asta, queste vanno in una classe, e magari avrai tante istanze (oggetti) di quel tipo in una lista; analogamente, il risultato di una di queste aste sarà un'altra classe che reca solo queste informazioni, magari contenendo un riferimento alla prima.

    In breve, è difficile darti una risposta finale conclusiva e già pronta sulle classi specifiche che devi creare, non conoscendo a fondo il problema software che devi implementare, ma basta probabilmente un approfondimento della OOP per capire come creare una struttura migliore e più slegata.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Homepage | Blog | Delphi Podcast | Delphi Succinctly (e-book)

  3. #3
    SebastianoFloridia non è in linea Scolaretto
    Post
    139
    Ciao Marco

    La struttura dati è dichiarata così:

    public static Dictionary<string, Asta> Aste = new Dictionary<string, Asta>();

    purtroppo ogni elemento è una entità separata del problema e la logica del progetto è coerente con quello che ho fatto.

    Il problema è la grandezza raggiunta.

    Vedo di trovarmi un soluzione di snellimento.

    Grazie

    Sebastiano Floridia

  4. #4
    L'avatar di _alka_
    _alka_ non è in linea Very Important Person
    Luogo
    Reggio Emilia
    Post
    1,157
    Quote Originariamente inviato da SebastianoFloridia Visualizza il messaggio
    purtroppo ogni elemento è una entità separata del problema e la logica del progetto è coerente con quello che ho fatto.
    Il problema è la grandezza raggiunta.
    E' improbabile che un'applicazione debba caricare in memoria contemporaneamente una simile quantità di dati tutta in una volta.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Homepage | Blog | Delphi Podcast | Delphi Succinctly (e-book)

  5. #5
    SebastianoFloridia non è in linea Scolaretto
    Post
    139
    Sono d'accordo.
    Mi è scappata la situazione di mano. Studio.

    Grazie

  6. #6
    Sgrubak non è in linea Scolaretto
    Luogo
    Torrazza Piemonte
    Post
    320
    Ma i vari [ResAste] e [DefAste] sono risultati dipendenti da dei parametri dell'asta stessa? Perché se così fosse potresti trasformarle da proprietà a metodi. Quando hai bisogno del valore, richiami la funzione che ne calcola al momento il valore, senza mantenere il valore all'interno dell'oggetto.
    Ad esempio: l'oggetto Rettangolo può essere semplicemente definito dalle proprietà Base, Altezza, PosizioneX e PosizioneY. Non ti serve salvare l'area del rettangolo in una proprietà dedicata, ma utilizzare un metodo che restituisca detta Area solo quando ti serve. Così ti sei risparmiato la memoria dell'area...

+ Rispondi al Thread

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi