Używam Delphi XE. Natknąłem się na problem z wyciekiem pamięci przy użyciu mydła Delphi. Okazuje się, że z powodu braku .Free rozmowy w TWSDLLookup.Destroy
, jak opisano w QC 91160Delphi XE wyciek pamięci w metodzie TWSDLLookup.Destroy
Problem, który mam jest opisany obejście, które jest po prostu dodać FLookup.Free
metody TWSDLLookup.Destroy
.
Nie chcę zmieniać źródła Delphi, więc próbowałem skopiować jednostkę do mojego folderu projektu, dokonując zmiany i rekompilacji, zgodnie z opisem w odpowiedzi Toma podanym jako here. Problem z tą techniką polega na tym, że najwyraźniej działa tylko wtedy, gdy przekompilujesz wszystkie zależne jednostki. Próbowałem skopiować tylko WSDLLookup.pas
do mojego katalogu projektu i pojawia się błąd Stackoverflow. Nie jestem zaznajomiony z usługami sieciowymi/SOAP, więc nie wiem, jakie inne jednostki powinienem skopiować, jeśli użyję tej techniki.
Odpowiedź Rob Kennedy'ego na tej samej stronie opisuje inną technikę związaną z zaszywaniem kodu - ale wydaje się, że nie dotyczy ona metod obiektowych. Zrobiłem tak, jak sugerował i pobrałem darmowy kod do kontroli TNT Unicode i zlokalizowałem odpowiednie procedury, ale nie byłem w stanie znaleźć informacji o tym, jak zahaczyć metody obiektu - jeśli rzeczywiście jest to możliwe. Gdybym mógł to zrobić, wtedy podłączyłem TWSDLLookup.Destroy
i dodałem wywołanie FLookup.Free
.
Wszelkie pomysły na rozwiązanie tego problemu będą mile widziane. Jestem trochę początkującym programistą, więc mam nadzieję, że przegapiłem coś oczywistego?
Dzięki za szybką odpowiedź :) –
Zobaczyłem coś o tym, że może użycie debugowania dcus spowodowałoby problem - być może właśnie dlatego mam przepełnienie stosu. A może mam inny błąd. –
W każdym razie, dzięki jeszcze raz. Ponieważ to działa, spróbuję dowiedzieć się, co jeszcze robię źle :) –