Ответ 1
Если при "закрытии вашего приложения" вы подразумеваете, что процесс завершается, вам технически не нужно ничего делать. Ваш процесс завершается, и ОС освобождает эти ресурсы.
Я предполагаю, что это могут быть некоторые неясные угловые случаи, когда какой-то компонент может создать какой-то файл или другой ресурс, и если Dispose
не вызывается, это не обязательно будет очищено, даже если ваш процесс завершается.
Я хотел бы привести пример этого, хотя это причудливый угловой случай. Скажем, вы ссылаетесь и используете компонент в своем коде. Когда вы создаете и используете это, он создает файл на 2 ГБ на вашем компьютере. Теперь давайте сделаем еще один шаг и скажем, что этот компонент фактически закрывает сам дескриптор файла, который обращается к этому 2-Гбайт файлу во время его использования из-за ошибки или просто плохого дизайна. Теперь метод Dispose
на этом объекте очищает этот файл, но он плохо документирован. По сути, отсутствие вызова Dispose
для этого оставит файл на компьютере. Это, безусловно, угловой случай и не приведет к тому, что ваша машина "пропустит" что угодно, но у вас есть файл размером 2 ГБ, который просто сидит там.
Как говорится, наилучшей практикой является вызов Dispose
, когда вы детерминированно выполняете свои ресурсы (ресурсы). Вы можете вызвать метод на вашем Singleton - let say Cleanup()
- который может запускаться при завершении работы.