首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XMLWriter与并行

XMLWriter与并行
EN

Stack Overflow用户
提问于 2011-10-17 20:34:06
回答 1查看 1.1K关注 0票数 1

我有一组数据库结果,我正在循环这些结果,希望将这些结果写入XML。本质上,我有一个var列表,其中每个var都有一组属性(即List<image>,图像具有image.name、image.path、image.id等)。

我希望将每个图像的每个属性都写入XML。我在并行循环中循环遍历图像列表。我就是这样设置的:

代码语言:javascript
复制
    using(XMLWriter writer = XMLWriter.Create(outputfile)
    {
    Parallel.ForEach({
         writer.WriteStartElement("DOCUMENT");
         writer.WriteElementString("id", idvalue);
         writer.WriteElementString("name", namevalue);
         writer.WriteEndElement();

         writer.WriteStartElement("DOCUMENT");
         writer.WriteElementString("id", idvalue);
         writer.WriteElementString("path", pathvalue);
         writer.WriteEndElement();
});
    }

不介意确切的语法.我大概是从我的头上来做说明,但是我想把一堆元素写到一个文件中。我想知道并行线程是如何影响处理的。它似乎包含了将元素写在一起的每一个循环;我半预料到在整个输出文件中都会有end元素,但事实并非如此。MSDN说:“任何这种类型的公共静态(在Visual中共享)成员都是线程安全的。任何实例成员都不能保证线程安全。”但是,在引用WriteEndElement时,“关闭一个元素并弹出相应的命名空间范围”。

到目前为止,我是幸运的,它似乎把所有的东西都写好了,还是XmlWriter实际上在WriteStartElement和WriteEndElement之间是线程感知的呢?只要正确地编写了每个元素,我就不关心元素本身的顺序。无论哪种方式都有真正的文档吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-17 20:38:44

这不是线程安全的,对于较大的数据集可能会更清楚地失败。

但是,您不能指望这里的并行性会有任何改进。您正在写入I/O设备,这是瓶颈,而不是CPU。

所以只需使用普通的foreach(...)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7799232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档