gpt4 book ai didi

c# - 在特定时间戳创建 ConcurrentQueue 中所有现有项目列表的最有效方法

转载 作者:行者123 更新时间:2023-12-05 09:24:29 25 4
gpt4 key购买 nike

我必须维护信息日志,这些日志可以同时从多个线程写入,但是当我需要它们时,我只使用一个线程将其出列,在出列集合之间需要大约 5 秒的时间。

以下是我编写的用于将其出队的代码。

if (timeNotReached)
{
InformationLogQueue.Enqueue(informationLog);
}
else
{
int currentLogCount = InformationLogQueue.Count;
var informationLogs = new List<InformationLog>();
for (int i = 0; i < currentLogCount; i++)
{
InformationLog informationLog1;
InformationLogQueue.TryDequeue(out informationLog1);
informationLogs.Add(informationLog1);
}
WriteToDatabase(informationLogs);
}

出列后,我将它传递给 LINQ 的插入方法,该方法需要将 InformationLog 列表插入到数据库中。

这是正确的方法还是有其他有效的方法?

最佳答案

您可以使用 ConcurrentQueue<T>通过这样的扩展方法直接在 Linq 语句中:

static IEnumerable<T> DequeueExisting<T>(this ConcurrentQueue<T> queue)
{
T item;
while (queue.TryDequeue(out item))
yield return item;
}

这将使您不必不断分配新的 List<T>ConcurrentQueue<T>对象。

关于c# - 在特定时间戳创建 ConcurrentQueue 中所有现有项目列表的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12259077/

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