gpt4 book ai didi

c# - 异步加载 XDocument

转载 作者:太空狗 更新时间:2023-10-29 18:28:41 26 4
gpt4 key购买 nike

我想将大型 XML 文档加载到 XDocument 对象中。使用 XDocument.Load(path, loadOptions) 的简单同步方法效果很好,但在加载大文件(尤其是从网络存储)时,在 GUI 上下文中会阻塞很长时间。

我编写此异步版本的目的是提高文档加载的响应速度,尤其是在通过网络加载文件时。

    public static async Task<XDocument> LoadAsync(String path, LoadOptions loadOptions = LoadOptions.PreserveWhitespace)
{
String xml;

using (var stream = File.OpenText(path))
{
xml = await stream.ReadToEndAsync();
}

return XDocument.Parse(xml, loadOptions);
}

但是,对于从本地磁盘加载的 200 MB XML 原始文件,同步版本会在几秒钟内完成。异步版本(在 32 位上下文中运行)改为抛出 OutOfMemoryException:

   at System.Text.StringBuilder.ToString()
at System.IO.StreamReader.<ReadToEndAsyncInternal>d__62.MoveNext()

我想这是因为临时字符串变量用于将原始 XML 保存在内存中以供 XDocument 解析。据推测,在同步场景中,XDocument.Load() 能够通过源文件流式传输,并且永远不需要创建一个巨大的字符串来保存整个文件。

有什么方法可以两全其美吗?使用完全异步 I/O 加载 XDocument,而不需要创建大型临时字符串?

最佳答案

关于c# - 异步加载 XDocument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43590338/

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