gpt4 book ai didi

c# - streamwriter 声明为静态 vs 使用 using 语句

转载 作者:太空宇宙 更新时间:2023-11-03 16:12:14 24 4
gpt4 key购买 nike

我是 C# 的新手所以请允许我有些无知 :)(我已经尝试四处搜索以了解我所看到的性能差异的原因,但到目前为止还没有明确的答案,所以我想我会在这里问知识渊博的观众......)

基本上...如果我使用 streamwriter 之类的东西:

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 几乎没有受到任何影响。

上面的 CPU 是否纯粹是通过 using 语句引起的初始化和处置? (如果是这样,C# 到底在做什么来吃掉这么多 CPU???)- 鉴于它是一个静态类,我已经强制自动刷新,当然这同样适用于第二个版本,或者它的处理方式是否不同,因此咀嚼减少 CPU 时间?

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

最佳答案

第二个片段有两个属性:- 它不会重新创建编写器,如果您多次调用日志,这会有所帮助。- 它不处理编写器,这意味着您正在编写的文本尚未刷新到磁盘,而是保留在内存中以供以后刷新!另一方面,您将每次调用都写入磁盘以记录第一个片段。

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

关于c# - streamwriter 声明为静态 vs 使用 using 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17069833/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com