Sto usando Delphi XE. Mi sono imbattuto in un problema di perdita di memoria usando Delphi Soap. Si scopre di essere a causa di una chiamata .Trasporto mancante nella TWSDLLookup.Destroy
, come descritto nella QC 91160Perdita di memoria Delphi XE nel metodo TWSDLLookup.Destroy
Il problema che ho è il descritto work-around, che è semplicemente aggiungere FLookup.Free
al metodo TWSDLLookup.Destroy
.
Non voglio modificare la sorgente Delphi, quindi ho provato a copiare l'unità nella cartella del mio progetto, apportando la modifica e la ricompilazione, come descritto nella risposta di Tom here. Il problema con questa tecnica è che apparentemente funziona solo se ricompilate anche tutte le unità dipendenti. Ho provato a copiare solo WSDLLookup.pas
nella directory del mio progetto e ottengo un errore StackOverflow. Non ho familiarità con Web Services/SOAP, quindi non so quali altre unità dovrei copiare se uso questa tecnica.
La risposta di Rob Kennedy nella stessa pagina descrive una tecnica diversa che coinvolge l'aggancio del codice, ma non sembra applicabile ai metodi dell'oggetto. Ho fatto come suggerisce e ho scaricato il codice gratuito per i controlli Unicode TNT e ho individuato le procedure pertinenti, ma non sono riuscito a trovare informazioni su come collegare i metodi di un oggetto, se questo è possibile. Se potessi fare questo, allora agganciare TWSDLLookup.Destroy
e aggiungere la chiamata FLookup.Free
.
Tutte le idee su come risolvere questo problema saranno molto apprezzate. Sono un po 'un programmatore novizio quindi spero di aver perso qualcosa di ovvio?
Grazie per la rapida risposta :) –
Ho visto qualcosa su questo, forse l'uso di debug dcus potrebbe causare un problema - forse è per questo che ottengo il mio stack overflow. O forse ho un altro bug. –
Comunque, grazie ancora. Dal momento che funziona, cercherò di scoprire cos'altro sto facendo male :) –