gpt4 book ai didi

c# - .NET 队列 ElementAt 性能

转载 作者:太空狗 更新时间:2023-10-29 22:14:55 26 4
gpt4 key购买 nike

我的部分代码遇到了困难:

    private void UpdateOutputBuffer()
{
T[] OutputField = new T[DisplayedLength];

int temp = 0;
int Count = HistoryQueue.Count;
int Sample = 0;

//Then fill the useful part with samples from the queue
for (temp = DisplayStart; temp != DisplayStart + DisplayedLength && temp < Count; temp++)
{
OutputField[Sample++] = HistoryQueue.ElementAt(Count - temp - 1);
}

DisplayedHistory = OutputField;
}

它占用了程序中的大部分时间。 HistoryQueue 中的元素数量为 200k+。 会不会是.NET中的队列在内部实现为链表?

解决这个问题的更好方法是什么?基本上,该类应该像一个 FIFO 一样,在大约 500k 个样本处开始丢弃元素,我可以选择 DisplayedLength 元素并将它们放入 OutputField。我正在考虑编写我自己的使用循环缓冲区的队列。

该代码可以很好地计算较低的值。 DisplayedLength 为 500。

谢谢,

大卫

最佳答案

Queue 没有 ElementAt 方法。我猜你是通过 Linq 得到的,它只是对 n 个元素进行强制迭代,直到它到达所需的索引。随着集合变大,这显然会减慢速度。如果 ElementAt 代表一种常见的访问模式,那么选择一个可以通过索引访问的数据结构,例如一个数组

关于c# - .NET 队列 ElementAt 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4645250/

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