c# - 如果我在整个应用程序生命周期中需要 StreamWriter,在哪里处理它?

标签 c#

如果我在整个应用程序生命周期内需要 StreamWriter,在哪里处理它?我将把它处理在析构函数中,这行得通吗?我必须处理刷新数据,并且我不想使用 AutoFlush 功能,因为来自 msdn:“假设您始终调用 Close,您可以通过将 AutoFlush 设置为 false 来获得更好的性能(或者至少是 Flush)当您使用 StreamWriter 完成写入时。”

那么我应该像下面的代码一样在析构函数中Dispose吗?

class Log
{
    private static StreamWriter swLog = new StreamWriter("logMAIN.txt");

    static ~Log()
    {
        swLog.Dispose();
    }

    public static void Push(LogItemType type, string message)
    {
        swLog.WriteLine(type + " " + DateTime.Now.TimeOfDay + " " + message);
    }
}

upd 而不是 Dispose 我本想调用 Close 但在这种情况下它并不重要,因为它们似乎做的完全相同。

最佳答案

您似乎是根据 MSDN 中的一些性能信息决定不刷新的。这不是我要开始的地方。

您是否有证据表明使用 AutoFlush 会导致严重性能问题?

您是否考虑过以不同的方式缓解这些性能问题,例如有一个线程写入 StreamWriter,自动刷新或每 20 秒定期刷新或其他方式?

请注意,您还没有告诉我们您正在编写哪种类型的应用程序 - 这可能会对您对关闭的了解程度产生重大影响。

另请注意,您给出的代码一开始就不是线程安全的。您最终可能会同时从多个线程使用 StreamWriter;我怀疑 StreamWriter 是专门为这种情况设计的。

关于c# - 如果我在整个应用程序生命周期中需要 StreamWriter,在哪里处理它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10741013/

相关文章:

C# Parse.com + Facebook 注册

c# - 来自引用的 dll 的方法代码是否有可能内联到我自己的代码中?

c# - 从 C++ 到 C# 的 bool 指针

c# - 所有 Blazor 页面的公共(public)属性?

c# - 使用图表显示我在 WPF 上每秒更新的数据

c# - StreamingContextStates.Clone 到底做了什么?

c# - 比较来自另一类C#的属性上的属性引用

c# - ASP.NET:重定向到用户的主页

c# - 如何从USB摄像头获取的每一帧中提取时间戳?

c# - 避免跨线程操作