データベースに解析する XML があります。この XML のサイズは約 10 MB で、数百万の要素が含まれています。
30 ~ 60 秒ごとに更新されますが、すべてではなくいくつかの要素のみが更新されます。
データベースへの最速の方法で解析するために、2 つの XML ファイルから重複する要素を削除する関数を開発しました。コードは次のとおりです。
XDocument doc2 = XDocument.Parse(tempDoc.ToString());
var doc1 = new XDocument();
try
{
doc1 = XDocument.Load(bookieName + ".xml");
}
catch
{ }
try
{
var dict1 = doc1.Descendants("event").Select(el => el.ToString()).ToList();
var dict2 = doc1.Descendants("event").Select(el => el.ToString()).ToList();
foreach (var elem in dict1)
{
if (dict2.Contains(elem))
{
if (dict2.Find(x => x == elem).ToString() == dict1.Find(x => x == elem).ToString())
{
doc2.Descendants("event").Where(x => x.ToString() == elem).Remove();
}
}
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
return doc2;
問題は、小さな XML ファイルには問題なく機能しますが、大きな XML ファイル (10MB) の場合、2 ~ 5 分間 100% の CPU を使用することです。
どうすればそれを改善し、より良くすることができるか考えていますか?
私はちょっと絶望的です。
ありがとう!