Если у вас есть один экземпляр для приложения, объект будет уничтожен при закрытии или сбое приложения. Вы можете вызвать Dispose в финализаторе, но это не гарантирует успеха.
Если Dispose не сделает что-то жизненно важное, например, сохранение вашего документа (это не должно), я бы сказал, не беспокойтесь слишком сильно. Тот факт, что это одноэлементный, означает, что он живет вечно, а утилизация предназначена только для освобождения ресурсов, которые иначе остались бы вокруг. Объект остается вокруг, так что нечего освобождать.
Однако некоторые люди могут нахмуриться и сказать: «Что, если Dispose сделает что-то важное для меня, кроме освобождения ресурсов?». Вы все равно можете вызвать Dispose после запуска приложения:
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new LogAnalizzer());
ListService.Dispose(); // or whatever you're going to call it
}
Я видел, что это хорошая практика для веб-приложений. Мне было интересно, то же самое для приложений winform?
Как правило, когда вашему приложению в целом требуется только один экземпляр чего-либо, (потокобезопасный) синглтон часто является хорошей идеей: кэш, подключение к базе данных, прокси, само приложение, регистратор. Ничто не говорит о том, что синглтоны не должны применяться и к вашим приложениям WinForm.
Помните, однако, что вы должны тщательно продумать свой дизайн. Что делать, если у вас есть регистратор и файл становится недоступным? Что делать, если прокси теряет связь? и т. д.