gpt4 book ai didi

c# - 将 90000 个 XElement 添加到 XDocument

转载 作者:行者123 更新时间:2023-12-02 15:04:33 25 4
gpt4 key购买 nike

我有一个Dictionary<int, MyClass>

它包含 100,000 个项目

填充了 10,000 个项目值,而 90,000 个项目值为空。

我有这个代码:

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 分钟才能完成。我似乎找不到瓶颈可能在哪里,或者这个时机听起来是否合适?

有人能看出为什么要花这么长时间吗?

最佳答案

如果您的MyInfoCollection太大了,我不会打电话ToList()这样您就可以使用ForEach扩展方法。调用ToList()将创建并填充一个巨大的列表。我会删除 ToList()调用 .ForEach进入for each声明,或者写一个 . ForEach IEnumerable<T> 的扩展方法.

然后对其进行分析并查看需要多长时间。另一件要做的事情是删除 ERRORS 的查找和空检查。元素。如果不存在,请不要调用 for each上面的声明。这样您就可以对它进行一次 null 检查,而不是 90,000 次。

另外,正如 Michael Stum 指出的那样,我定义一个字符串来保存值 DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss:fff") ,然后引用它或传入它。另外,您甚至不使用此调用:

DateTime recordTime = DateTime.Now;

关于c# - 将 90000 个 XElement 添加到 XDocument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2448701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com