Le librerie Apache POI lavorano sulla RAM

di il
32 risposte

32 Risposte - Pagina 2

  • Re: Le librerie Apache POI lavorano sulla RAM

    Ma che significa scrivere -Xms256m -Xmx3584m dentro il programma?
    Il programma sà quante risorse ha, che senso ha scriverglielo all'interno del programma?

    Fra l'altro le Apache poi forse sono le migliori librerie in via di circiolazione, forse non ti sovviene un tantino il dubbio che non sei te che gestisci al meglio le risorse?
  • Re: Le librerie Apache POI lavorano sulla RAM

    schumy2000 ha scritto:


    Ma che significa scrivere -Xms256m -Xmx3584m dentro il programma?
    Il programma sà quante risorse ha, che senso ha scriverglielo all'interno del programma?

    Fra l'altro le Apache poi forse sono le migliori librerie in via di circiolazione, forse non ti sovviene un tantino il dubbio che non sei te che gestisci al meglio le risorse?
    Non sono le migliori perché quelle di Matlab per esempio scheggiano molto di più, avete detto voi che c'è solo 1 sistema per migliorare la questione dell'heap (-Xms256m -Xmx3584m) inoltre io vi confermo che per scrivere su un file esistente c'è solo questo sistema!!!
    package gestione;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    
    public class Main2 {
    	   public static void main(String[] args) {
    		   int a = 100000;
    		   int b = 100;
    	      Double[][] d = new Double[a][b];
    	      Double m = 1001d;
    	      for (int i = 0; i < d.length; i++) {
    	         for (int j = 0; j < d[0].length; j++) {
    	            d[i][j] = m;
    	         }
    	      }
    	      String nomefoglio = "z.xlsx";
    	      String nomefile = "z.xlsx";
    	      try {
    	         FileInputStream file = new FileInputStream(new File(nomefile));
    	         XSSFWorkbook workbook = new XSSFWorkbook(file);
    	         XSSFSheet sheet = workbook.getSheet(nomefoglio);
    	         int rownum = 0;
    	         int cellnum = 0;
    	         for (int i = 0; i < a; i++) {
    	            Row row = sheet.createRow(rownum++);
    	            for (int j = 0; j < b; j++) {
    	               Cell cell = row.createCell(cellnum++);
    	               cell.setCellValue((Double) d[i][j]);
    	            }
    	            cellnum = 0;
    	         }
    	         file.close();
    	         FileOutputStream outFile = new FileOutputStream(new File(nomefile));
    	         workbook.write(outFile);
    	         outFile.close();
    	      } catch (IOException e) {
    	         e.printStackTrace();
    	      }
    	   }
    	}
    Ho provato a modificare questo codice in diversi modi ma non ho notato vantaggi! Il codice che uso è un po' più complesso però il cuore dello script è scritto sopra. Non vedo modi per migliorarlo! Ma proprio nessuno! Per me le librerie sono delle cag@te...

    E' chiaro che se non vi degnate neppure di leggere il codice sopra non capirete mai quello che voglio dire... poco ma sicuro...
    XSSFWorkbook workbook = new XSSFWorkbook(file); 
    in pratica salva file in workbook, non è possibile scrivere un pezzo di "workbook" alla volta...
  • Re: Le librerie Apache POI lavorano sulla RAM

    Perbacco ma come te lo devo dire?

    DIMENTICA MATLAB SE VUOI FARE JAVA...

    per java le apache poi sono le migliori. PUNTO

    P.S. Se dovessi leggere tutto quello che hai postato (qui e sugli altri forum) dovrei mettermi una settimana in malattia. Noi lavoriamo e non abbiamo il tempo di leggere righe e righe di codice...
    miii ma quando ti ci metti diventi molto arrogante sai?
    Forse è per questo che ti hanno cacciato via dall'altro forum
  • Re: Le librerie Apache POI lavorano sulla RAM

    schumy2000 ha scritto:


    Perbacco ma come te lo devo dire?

    DIMENTICA MATLAB SE VUOI FARE JAVA...

    per java le apache poi sono le migliori. PUNTO


    Quindi stai appoggiando la mia tesi ovvero che su java e con le librerie apache poi, per quanto riguarda la scrittura/lettura su/da fogli excel, non è possibile raggiungere livelli di performance simili a quelli su matlab, diversamente da quelli che sostengono che i 2 metodi sono confrontabili?

    schumy2000 senza offesa, per carità, ma ti voglio ribadire una cosa che ho già scritto: Se mi dici che le apache poi sono più configurabili ti do ragione (su matlab le caselle non le colori) ma sulle performance o editi il codice sopra in maniera che funzioni anche sul mio pc con 4gb di ram (a = 100000 e b = 100) oppure devo desumere che tu sia permaloso e non voglia accettare una mia semplice constatazione su questo fatto. Inoltre non credo che sia sbagliato confrontare 2 linguaggi diversi e non dico neppure che matlab sia immacolato infatti ho criticato più volte quest’ultimo per non avere librerie grafiche decenti per fare interfacce grafiche ai propri programmi.
  • Re: Le librerie Apache POI lavorano sulla RAM

    schumy2000 ha scritto:


    P.S. Se dovessi leggere tutto quello che hai postato (qui e sugli altri forum) dovrei mettermi una settimana in malattia. Noi lavoriamo e non abbiamo il tempo di leggere righe e righe di codice...
    miii ma quando ti ci metti diventi molto arrogante sai?
    Forse è per questo che ti hanno cacciato via dall'altro forum
    Non c’è caso che leggi tutto basta che leggi solo questo:
    package gestione;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    
    public class Main2 {
          public static void main(String[] args) {
             int a = 100000;
             int b = 100;
             Double[][] d = new Double[a][b];
             Double m = 1001d;
             for (int i = 0; i < d.length; i++) {
                for (int j = 0; j < d[0].length; j++) {
                   d[i][j] = m;
                }
             }
             String nomefoglio = "z.xlsx";
             String nomefile = "z.xlsx";
             try {
                FileInputStream file = new FileInputStream(new File(nomefile));
                XSSFWorkbook workbook = new XSSFWorkbook(file);
                XSSFSheet sheet = workbook.getSheet(nomefoglio);
                int rownum = 0;
                int cellnum = 0;
                for (int i = 0; i < a; i++) {
                   Row row = sheet.createRow(rownum++);
                   for (int j = 0; j < b; j++) {
                      Cell cell = row.createCell(cellnum++);
                      cell.setCellValue((Double) d[i][j]);
                   }
                   cellnum = 0;
                }
                file.close();
                FileOutputStream outFile = new FileOutputStream(new File(nomefile));
                workbook.write(outFile);
                outFile.close();
             } catch (IOException e) {
                e.printStackTrace();
             }
          }
       }
    e che mi dimostri che il sistema che sto usando io è migliorabile. Sei tu quello arrogante, non io! Io mi sono sbattuto per capire come funzionano queste librerie e ho scoperto che hanno un problema “la performance” ed invece di ringraziarmi mi aggredite dicendomi che non sono buono a far nulla. Non mi sembra che il tuo atteggiamento sia costruttivo in un forum. Se poi mi dici che le apache poi sono le migliori allora siamo messi anche peggio!
  • Re: Le librerie Apache POI lavorano sulla RAM

    Premesso che sono completamente d'accordo con schumy (anche per quanto riguarda il ban dall'altro forum) e premesso che non mi occupo tanto di Java, non comprendo perché tu debba preparare l'array con tutti quegli elementi. Fossi in te comincerei ad eliminare questa linea

    Double[][] d = new Double[a];

    e scrivere

    cell.setCellValue((Double) m);

    Infine, sarebbe bene che tu scrivessi nel forum di supporto della libreria per farti chiarire il suo corretto funzionamento. Ma solo in quel forum, per favore.

    P.S. Ci sei già stato ... figuriamoci .... http://apache-poi.1045710.n5.nabble.com/Apache-POI-works-but-it-uses-too-RAM-is-it-a-limit-of-your-library-td5712425.html
  • Re: Le librerie Apache POI lavorano sulla RAM

    Il tuo suggerimento non è pertinente perché nel medoto l'imput non ci sarà mai.
    Come vedi non mi hanno risposto perché probabilmente è come dico io, è una libreria non performante!
    Le API che avevo provato erano pure peggio...
  • Re: Le librerie Apache POI lavorano sulla RAM

    peruzzo ha scritto:


    Il tuo suggerimento non è pertinente perché nel medoto l'imput non ci sarà mai.
    Prima di tutto si scrive input ...
    In secondo luogo non si capisce perché non è pertinente ... hai provato o no?
    Come vedi non mi hanno risposto perché probabilmente è come dico io, è una libreria non performante!
    Non credere che rispondano a tutti ... e comunque quella è la migliore libreria non è detto che possa risolvere tutti i problemi del mondo.
  • Re: Le librerie Apache POI lavorano sulla RAM

    oregon ha scritto:


    non si capisce perché non è pertinente ... hai provato o no?
    Intanto ti ringrazio per averci dato un'occhiata e comunque no, non ho provato e non è pertinente perché non fa parte del metodo che vorrei scrivere. Il problema è questo: ho una matrice di partenza, proveniente da chissà dove e prodotta in chissà che modo e vorrei scriverla su file excel. Per simulare il problema ho bisogno di una matrice di partenza perché devo, in seconda battuta (già fatto) scrivere un metodo del tipo scrivisuxls("nome_delfile.xls" , matrice_di_oggetti , ecc...). Detto in altro modo DEVO avere una matrice e di fatto HO anche effettivamente una matrice per lo start.
  • Re: Le librerie Apache POI lavorano sulla RAM

    http://apache-poi.1045710.n5.nabble.com/Apache-POI-works-but-it-uses-too-RAM-is-it-a-limit-of-your-library-td5712425.html#a5712444

    Ho postato anche sul forum ufficiale ma non mi cagano neanche morto... sarà per il mio inglese scadente? Tra un paio di giorni dovreste anche vedere la mia nuova "risposta" con il codice di questo sito... se neanche la rispondono ci rinuncio...

  • Re: Le librerie Apache POI lavorano sulla RAM

    Una cosa che mi sono chiesto è questa: non c’è un sistema per aprire e chiudere il workbook dopo ogni riga? Ho provato a modificare il codice ma non ci sono riuscito e poi mi sono dato questa risposta: non risolverei comunque perché quando aprirei il workbook riempierei la memoria con una mole di informazioni in ogni modo da capogiro ovvero XSSFSheet sheet = workbook.getSheet(nomefoglio).
    Mi piacerebbe sapere se qualcuno di voi che ha 16GB di ram sul proprio pc riesce oppure no a riempire senza problemi tutto un foglio .xlsx.
  • Re: Le librerie Apache POI lavorano sulla RAM

    Grande novità! Pare che ci sia un altro strumento meglio di XSSF di Apache POI e si chiama SXSSF ma è sempre di Apache POI... non riesco però a capire come funziona...
  • Re: Le librerie Apache POI lavorano sulla RAM

    Non so se fa al caso tuo, ma hai provato anche con jExcel?
  • Re: Le librerie Apache POI lavorano sulla RAM

    Della,
    JExcel funziona solo con i file .xls (Versione 2003 per intenderci)
    Apache POI è ottimizzato anche per i file .xlsx (Versione 2010)
  • Re: Le librerie Apache POI lavorano sulla RAM

    Ah ok come non detto allora
Devi accedere o registrarti per scrivere nel forum
32 risposte