|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Feb 2010
Messaggi: 35
|
[c++] Dll per Excel, eccessivo utilizzo di memoria
Ciao a tutti,
ho un problema con una DLL scritta in C++ per Excel. Tale dll viene richiamata in un ciclo for, quindi eseguita alcune migliaia di volte. Osservando l'occupazione di memoria dal Task Manager ho notato che la memoria utilizzata da excel cresce continuamente fino raggiungere il massimo disponibile provocando il crash dell'excel. Con altre dll scritte in fortran il problema non si presenta, però visto che la dll è parecchio lunga, non ho al momento intenzione di tradurla in fortran. Nel codice ho avuto cura di deallocare gli array creati dinamicamente e mettere a NULL i puntatori. Mi potete suggerire una strada per ovviare a questo problema? Grazie mille! Buona giornata... |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Se ritieni che il tuo codice non sia responsabile dei leak evidentemente è la libreria. Probabilmente tutte le volte che richiami quel metodo particolare esegue delle allocazioni che o non vengono deallocate prima della fine del metodo oppure richiedono una chiamata esplicita ad altro metodo per essere deallocate.
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Feb 2010
Messaggi: 35
|
Mi sembra che sia a libreria la responsabile dei leaks, perchè se eseguo il codice commentando la chiamata alla dll, non ho problemi con la memoria.
Per deallocare i vettori che ho usato nel codice c++, ho usato "delete [] array" e poi "array=NULL". Ci sono altri modi per deallocare gli array? Ecco, un altro problema che nasce nel richiamare la dll da vba...Se richiamo la dll da excel, ottengo un errore di overflow al termine della chiamata a meno di non mettere delle istruzioni intermedie che prendano tempo. Sono forse collegati i due problemi? Grazie di nuovo! |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
se allo scaricamento della DLL (notifica DLL_PROCESS_DETACH, oppure nel codice del distruttore di una variabile globale) invochi la funzione _CrtDumpMemoryLeaks viene inviato al debugger un dump dei blocchi di memoria allocati con new e non ancora deallocati.
|
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Feb 2010
Messaggi: 35
|
Ho provato ad invocare la funzione _CrtDumpMemoryLeaks, ma non ottengo nessun errore: tutto sembra deallocato a dovere. Non è che è l'excel a continuare a riempire la memoria a questo punto?
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
Quote:
inoltre puoi incollare qui il contenuto della Output Window di Visual Studio? ora non ricordo con certezza ma mi pare che la _CrtDumpMemoryLeaks non lasciasse mai "a mani vuote", se non c'era nessun leak un messaggio di successo te lo dava. mi pare. ad ogni modo non é escluso che la colpa possa essere o di Excel o di qualche altro componente, per esempio il motore di parsing di VBScript utilizzato da Excel per far girare gli script in VBA. in questo caso peró non saprei aiutarti purtroppo, servirebbe qualche tool che ti faccia almeno capire da quale heap proviene il leak; tools del genere possono essere realizzati tramite apposite chiamate Win32 ma molto probabilmente ne esistono di giá fatti che io non conosco. |
|
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Feb 2010
Messaggi: 35
|
Io l'ho messa al termine del programma dopo aver deallocato tutti i vettori dinamici ed i puntatori.
Stando alla guida in linea la funzione restituisce True se si verificano errori, altrimenti restituisce False... |
|
|
|
|
|
#8 |
|
Member
Iscritto dal: Mar 2010
Città: Roma
Messaggi: 132
|
Utilizza l'interop della microsoft è una bomba non da nessun problema ed è veloce!
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
|
|
|
|
|
|
#10 |
|
Member
Iscritto dal: Feb 2010
Messaggi: 35
|
Non è disponibile, lavoro su un computer aziendale...
|
|
|
|
|
|
#11 |
|
Member
Iscritto dal: Mar 2010
Città: Roma
Messaggi: 132
|
Come non è C++?? C++/cli.
Che vorresti dire che usi il pc aziendale, l'interop è scaricabile da internet... |
|
|
|
|
|
#12 |
|
Member
Iscritto dal: Feb 2010
Messaggi: 35
|
Intendo dire che non posso aggiungere altri programmi a mio piacimento.
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
|
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
Quote:
comunque sono d'accordo, C++ e C++/CLI sono due linguaggi diversi, hanno solo delle somiglianze nella sintassi. |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:06.




















