Streamwriter用using语句声明静态vs

本文关键字:静态 vs 声明 语句 using Streamwriter | 更新日期: 2023-09-27 18:18:17

我是c#新手,所以请允许我有一些无知:)(我试着四处寻找,以了解我所看到的性能差异的原因,但到目前为止还没有一个明确的答案,所以我想我应该问一下这里知识渊博的观众…)

基本上……如果我使用像这样的流写入器:

public static class Logging
{
  readonly static object DebugWriter = new object();
  public static void Log(string msg)
  {
    lock (DebugWriter)
    {
      using (StreamWriter writer = new StreamWriter("Debug.txt", true))
      {
        writer.WriteLine(DateTime.UtcNow.ToString("HH:mm:ss.ffff") + " " + msg);
      }
    }
  }
}

然后假设我通过这个类发送大量的文本,我看到一个明显的CPU负载。但是如果我这样写:

public static class Logging
{
  readonly static object DebugWriter = new object();
  static StreamWriter lwriter = new StreamWriter("LocalDrivenDebug.txt", true) { AutoFlush = true };
  public static void Log(string msg)
  {
    lock (DebugWriter)
    {
        lwriter.WriteLine(DateTime.UtcNow.ToString("HH:mm:ss.ffff") + " " + msg);
    }
  }
}

然后我看到几乎没有击中CPU。

上面的代码是否纯粹通过using语句引起的初始化和处置来消耗CPU ?(如果是这样的话,c#到底在做什么来消耗这么多的CPU??) -考虑到它是一个静态类,我已经强制自动刷新,肯定同样适用于第二个版本,或者它的处理方式不同,因此消耗更少的CPU时间?

我只能假设我错过了一些明显的东西。所以希望有人能给我一些启发,因为我"认为"你应该使用using语句作为一种更安全/更方便的处理方式?

Streamwriter用using语句声明静态vs

第二个代码片段有两个属性:-它不重新创建的作家,这可以帮助如果你调用log多次。-它不释放写入器,这意味着你正在写的文本还没有刷新到磁盘,而是保存在内存中供以后刷新!在另一端,使用第一个代码片段将每个调用写入磁盘以记录日志。

总而言之,这两种效果应该可以解释你所看到的显著差异:)