gpt4 book ai didi

c# - XmlWriter 异步方法

转载 作者:可可西里 更新时间:2023-11-01 09:00:18 27 4
gpt4 key购买 nike

我在 msdn 文档中找到了异步使用 XmlWriter 的示例 http://msdn.microsoft.com/en-us/library/system.xml.xmlwriter.aspx

async Task TestWriter(Stream stream) 
{
XmlWriterSettings settings = new XmlWriterSettings();
settings.Async = true;
using (XmlWriter writer = XmlWriter.Create(stream, settings)) {
await writer.WriteStartElementAsync("pf", "root", "http://ns");
await writer.WriteStartElementAsync(null, "sub", null);
await writer.WriteAttributeStringAsync(null, "att", null, "val");
await writer.WriteStringAsync("text");
await writer.WriteEndElementAsync();
await writer.WriteProcessingInstructionAsync("pName", "pValue");
await writer.WriteCommentAsync("cValue");
await writer.WriteCDataAsync("cdata value");
await writer.WriteEndElementAsync();
await writer.FlushAsync();
}
}

我对线程和异步编程的了解告诉我,这是太慢的代码,使用同步 Write 方法会快得多。我修改了这段代码并进行了测试。我发现我是对的,在我的环境中,对于超过 100Mb 的文件,同步代码的速度提高了 3-4 倍,对于小于 10MB 的文件,同步代码的速度提高了 8-10 倍。

所以我的问题是,是否存在这样的代码可用并提供合理的性能提升的场景?

最佳答案

首先,我不得不质疑基准测试。在 100MB 文件上慢 3-4 倍确实很重要。

但无论如何,async 并不是为了更快地做事。它是关于在该操作正在进行时做其他事情。在客户端,您可以获得响应能力的好处;在服务器端,您可以获得可扩展性的好处。

权衡是操作本身实际上更慢(但它应该只是慢一点,而不是慢 3-4 倍)。您可能没有使用真正的异步流进行写入(您必须专门异步打开文件流才能获取异步流)。

关于c# - XmlWriter 异步方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16641074/

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