2010-03-31 14 views
7

Co do strategii zarządzania pamięcią Delphi?Strategie projektowania zarządzania pamięcią Delphi: obiekt lub interfejs?

  • Jakie są przypadki użycia, w których wolisz tworzyć i zwalniać Obiekty ręcznie?
  • Jakie są przypadki użycia, w których preferowane będą interfejsy, obiekty interfejsu i ich mechanizm liczenia odwołań?

Czy zidentyfikowałeś jakieś pułapki lub trudności z liczącymi się obiektami zliczanymi?

Dziękujemy za podzielenie się swoimi doświadczeniami tutaj.

Odpowiedz

7

Zawsze, gdy udostępniasz obiekty między wątkami, lepiej używać interfejsów. Współdzielony obiekt nie musi mieć jednego możliwego do zidentyfikowania właściciela, więc pozwalając wątkowi, który rezygnuje z ostatniego odwołania do interfejsu, obiekt implementujący jest naturalnym dopasowaniem. Zobacz OmniThreadLibrary, aby zobaczyć dobry przykład wykorzystania interfejsów zarówno do projektowania, jak i do pokonania niektórych skomplikowanych problemów związanych z własnością w wielowątkowym kodzie.

1

Powinieneś zawsze preferować interfejsy, chyba że nie jest to możliwe z powodu ograniczeń VCL. Podejrzewam, że gdyby interfejsy były dostępne w Delphi 1.0, VCL wyglądałoby zupełnie inaczej.

Jedną z mniej ważnych kwestii jest zwrócenie uwagi na cykle odniesienia. Jeśli A posiada interfejs do B, a B ma interfejs do A, oboje będą żyć wiecznie.

+0

Czy możesz szczegółowo opisać te ograniczenia VCL? –

+3

Po prostu wiele klas VCL korzysta z różnych mechanizmów zarządzania pamięcią, a nie można po prostu wstawić interfejsu pomiędzy nimi. Oczywistym przypadkiem są dzieci TComponentu, które są własnością rodzica i niszczone przez zniszczenie. –

+2

Komponenty VCL mogą mieć różne odniesienia do siebie, implementując komponenty jako interfejsy, powodowałyby cykliczny koszmar odniesienia. –