我是C#的全新人物,儘管在使用其他語言方面有一些小的經驗,並且遇到了困難。C#Parallel.Foreach with XML
下面的代碼工作完全按照預期:
XmlDocument doc = new XmlDocument();
doc.Load("config.xml");
foreach (XmlNode node in doc.DocumentElement.ChildNodes)
{
string name = node.Attributes["name"].Value;
string ips = node.Attributes["ip"].Value;
string port = node.Attributes["port"].Value;
Console.WriteLine(name + " | " + ips + ":" + port);
}
我出去正是我與零次失誤預期,但下面的代碼已經難住我了。我希望有人能夠解釋我做錯了什麼,因爲我覺得我可能錯過了一些基本的東西。
XmlDocument doc = new XmlDocument();
doc.Load("config.xml");
node = doc.DocumentElement.ChildNodes;
Parallel.ForEach(node,
(item) => {
string name = item.Attributes["name"].Value;
string ips = item.Attributes["ip"].Value;
string port = item.Attributes["port"].Value;
Console.WriteLine(name + " | " + ips + ":" + port);
});
我只是試圖並行運行循環的每個迭代。當我嘗試編譯我收到以下錯誤:
CS0411的類型參數的方法「Parallel.ForEach (IEnumerable的,動作)」不能從使用推斷。 嘗試明確指定類型參數。
實施例下面的XML:
<item name="pc01" ip="192.168.0.10" port="80"><!--PC01--></item>
<item name="pc02" ip="192.168.0.11" port="80"><!--PC02--></item>
<item name="pc03" ip="192.168.0.12" port="80"><!--PC03--></item>
<item name="pc04" ip="192.168.0.13" port="80"><!--PC04--></item>
任何援助將不勝感激。
什麼問題? – SLaks
另外,[文檔](https://msdn.microsoft.com/en-us/library/system.xml.xmldocument(v = vs.110).aspx)聲明'XmlDocument'不能保證線程安全。儘管查詢不太可能會導致問題,但這可能存在風險。你真的在單線程的情況下有性能問題嗎? –
@Charles Mager,如果你只是閱讀,我相信XmlDocument應該跨線程。 –