C# XMLWriter与并行
我有一组循环使用的数据库结果,我想将其写入XML。本质上,我有一个变量列表,其中每个变量都有一组属性(即,C# XMLWriter与并行,c#,parallel-processing,xmlwriter,C#,Parallel Processing,Xmlwriter,我有一组循环使用的数据库结果,我想将其写入XML。本质上,我有一个变量列表,其中每个变量都有一组属性(即,List,其中image有image.name、image.path、image.id等) 我想将每个图像的每个属性写入XML。我在平行循环中循环浏览图像列表。我是这样设置的: using(XMLWriter writer = XMLWriter.Create(outputfile) { Parallel.ForEach({ writer.Write
List
,其中image有image.name、image.path、image.id等)
我想将每个图像的每个属性写入XML。我在平行循环中循环浏览图像列表。我是这样设置的:
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();
});
}
不管确切的语法是什么……我只是粗略地从我的头脑中进行说明,但我想把一堆元素写到一个文件中。我想知道并行线程是如何影响处理的。它似乎包含将元素写到一起的每个循环迭代;我有一半希望在整个输出文件中插入结束元素,但事实并非如此。MSDN说“此类型的任何公共静态(在Visual Basic中共享)成员都是线程安全的。任何实例成员都不保证是线程安全的。”但在引用WriteEndElement时,“关闭一个元素并弹出相应的命名空间范围。”
到目前为止,我是幸运的,因为它似乎能按顺序写出所有内容,还是XmlWriter实际上在WriteStarteElement和WriteEndElement之间有某种线程意识?我并不在乎元素本身的顺序,只要每个元素都写得正确。这两种方式都有真实的文档吗 这不是线程安全的,对于较大的数据集,可能会更明显地失败 但是,您不能期望这里的并行性有任何改进。您正在写入I/O设备,这是瓶颈,而不是CPU
因此,只需使用普通的
foreach(…)
“到目前为止,我很幸运,它似乎在写”—是的,你很幸运。谢谢你的确认。如果循环中也有一个数据库服务插入调用,这有关系吗?我们一直以这种方式运行它,直接进入数据库,但我们遇到了基础设施问题。所以我们想把输出的一部分转储到一个文件中,这样我们就可以大容量加载,而不是做一堆小的插入。无论如何,我可能会考虑删除并行性,但是如果我想保持这一点,我可以使用什么技术来并行创建/添加元素节点,但在每个循环中保持它们同步,并在最后写出它们?