Может ли Application.terminate привести к утечке памяти? - PullRequest
1 голос
/ 03 апреля 2012

В какой-то момент я должен закрыть свое приложение, разработанное в Delphi XE2, с помощью Application.Terminate.

Я хотел бы подтвердить, будет ли из-за этого потеря памяти? Если да, то о каких возможных сценариях мне нужно позаботиться? И как их решать?

Ответы [ 2 ]

5 голосов
/ 03 апреля 2012

Независимо от того, как вы закрываете процесс, не будет утечки памяти.Когда процесс закрывается, ОС освобождает всю память, принадлежащую процессу.

Now, Application.Terminate приводит к упорядоченному завершению работы, начиная с объекта Application.Все объекты, принадлежащие Application, будут уничтожены.Если эти объекты в свою очередь владеют другими объектами, принадлежащие им объекты будут уничтожены.Однако с точки зрения утечки памяти процесс не может быть завершен и утечка памяти.Процесс может прекратить и оставить определенные ресурсы в неопределенном состоянии, поэтому часто рекомендуется завершать процесс упорядоченным образом.

5 голосов
/ 03 апреля 2012

Вызов метода Application.Terminate не приводит к утечкам памяти, этот метод эквивалентен вызову функции PostQuitMessage . Утечки памяти возникают, когда ресурсы не высвобождаются должным образом. Чтобы проверить, есть ли утечки памяти в вашем приложении, вы можете установить для глобальной переменной ReportMemoryLeaksOnShutdown значение true.

...