2016-10-05 3 views
0

Допустим, я хочу сделать некоторые записи, первое, что я хотел бы сделать, это открыть FileStream, чтобы написать.Нужно ли мне удалять статические объекты, которые проживают всю жизнь приложения?

Я хотел бы использовать тот же самый поток для приложения вместо открытия и закрытия потока для каждой записи журнала

Это означает, что поток будет жить до тех пор, как приложение.

что-то вроде

public static class Logger 
{ 
    static StreamWriter SW; 
} 

Теперь вопрос, нужно ли мне сделать закрытым способом, который бы Dispose SW и называют его некоторые, где, как Window.Closed

Я чувствую GC сможет сделать его прав работы и свободного ПО, когда приложение заканчивается. Но я хочу убедиться, что это не приведет к зависанию приложения в некоторых особых ситуациях.

+0

@ GiladGreen ответ сказал, что все ресурсы будут бесплатными ОС при отключении приложения. Но я хочу знать, может ли это не сделать это, может помешать закрытию приложения – Steve

+3

IMHO, сохраняя поток, открытый во время срока службы приложения, является плохой идеей, его следует открывать/закрывать только тогда, когда это действительно необходимо – Sehnsucht

+0

@Sehnsucht не будет неэффективным закрыть и снова открыть поток, но – Steve

ответ

1

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

Правда, но только потому, что ресурс освобожден, это не значит, что он был освобожден в чистом виде.

Вам необходимо избавиться от StreamWriter, потому что он не очищает данные немедленно по умолчанию. Если вы не закрываете/не удаляете его до того, как приложение закрыто, последний бит текста не будет выписан.

class Program 
{ 
    static StreamWriter SW = new StreamWriter("test.txt"); 
    static void Main() 
    { 
     SW.Write("Test"); 
    } 
} 

Текстовый файл не будет содержать слово Test после выполнения вышеуказанной программы.

Если вы добавили в программу SW.AutoFlush = true;, вам будет хорошо, если вы не избавитесь от нее. Но вам нужно знать об ограничениях, подобных этому при работе с любым классом, который реализует IDisposeable

Смежные вопросы