我有一个Dictionary<int, MyClass>
增加90000至的XElement的XDocument
它包含100,000个项目
万件值填充,而90000为空。
我有这样的代码:
var nullitems = MyInfoCollection.Where(x => x.Value == null).ToList();
nullitems.ForEach(x => LogMissedSequenceError(x.Key + 1));
private void LogMissedSequenceError(long SequenceNumber)
{
DateTime recordTime = DateTime.Now;
var errors = MyXDocument.Descendants("ERRORS").FirstOrDefault();
if (errors != null)
{
errors.Add(
new XElement("ERROR",
new XElement("DATETIME", DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss:fff")),
new XElement("DETAIL", "No information was read for expected sequence number " + SequenceNumber),
new XAttribute("TYPE", "MISSED"),
new XElement("PAGEID", SequenceNumber)
)
);
}
}
这似乎需要约2分钟即可完成。我似乎无法找到瓶颈可能出现的位置,或者这种时机听起来正确吗?
任何人都可以看到为什么采取这么久?
使用调试跟踪查看查询需要多长时间,以及记录需要多长时间。另外,在处理100,000个项目文档时,XML可能会有很多处理开销。 – 2010-03-15 16:32:10
如果您检查您可能会发现查找每个通话中的“ERRORS”元素是最昂贵的部分之一。或者将ERRORS元素传递给该方法,或者使用LINQ来获得您的优势,如下所述。 – 2010-03-15 18:09:04
你运行了一个分析器吗?我会感兴趣的是为什么你运行DateTime.now两次(因为它调用相对昂贵),以及在调用90k次时真的有多慢... – 2010-03-15 16:38:43