- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我的部分代码遇到了困难:
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/
在我的代码中,我得到了一个 ConcurrentDictionary,现在我想遍历 Dictionary 中的每个元素,但是如果条件为真,我想从这个 Dictionary 中删除一个元素,所以我不能使
我有这段代码从列表的计数 (-1) 中获取一个随机数,然后获取该索引处的元素。然后我从该列表中删除该对象并调用代码,直到所有对象都从该列表中消失。 我有点困惑,为什么会有 13 个索引 (0-12),
IGrouping 支持 ElementAt 方法来索引分组的集合。那么为什么方括号运算符不起作用呢? 我可以做类似的事情 list.GroupBy(expr).Select(group => gr
考虑这段代码: int size = 100 * 1000 * 1000; var emu = Enumerable.Range(0, size); var arr = Enumerable.Rang
Enumerable.ElementAt(TSource) 方法的 MSDN 库条目说 "If the type of source implements IList, that implementa
我有一个字典,我需要用传入数据保持更新,在解析传入数据后,我必须检查字典中是否有任何条目不存在于传入数据中(解析时的传入数据是一个列表我需要将其与字典条目进行映射)。 为了避免多次循环删除条目,我为字
我有一个字典,我需要遍历其中的元素并进行更改。我不能使用 foreach 语句,因为它有时会抛出 InvalidOperationException,表示在枚举期间无法修改集合。 我可以使用 for
我的部分代码遇到了困难: private void UpdateOutputBuffer() { T[] OutputField = new T[DisplayedLe
IEnumerable公开一个枚举器,因此可以枚举对象。此接口(interface)公开的索引没有任何内容。 IList关于索引,因为它公开了 IndexOf方法。 那么 Enumerable.Ele
我遇到的问题是,在创建类型为 List 的对象“oListType01”并将其分配给类型为“object”的另一个对象“oObjectType”之后,我无法再访问任何函数“ElementAt(1)”
var ints = [0, 1, 2, 3]; var foo = ints.elementAt(1); var bar = ints[1]; assert(foo == bar); 两者 elem
请注意,我目前正在学习 C# 并在遇到这个障碍时翻阅教科书。 你怎么称呼ElementAt来自 IEnumerable ?this中的第二条评论 所以问题提到了它,但我只是收到一个错误。 Here他们
为什么字典在动态规划期间“不包含‘ElementAt’的定义” Dictionary D1 = new Dictionary(); D1.Add("w1", 10);
我想获取列表的方法“ElementAt”的 MethodInfo。 MethodInfo method = obj.GetType().GetMethod("ElementAt"); 但是,“方法”是
在 LINQ to SQL 中,尝试对从 LINQ to SQL 查询返回的 IQueryable 使用 ElementAt 扩展方法时,出现异常“不支持查询运算符‘ElementAt’。”。 这是堆
我正在使用方法 Queryable.ElementAt(Int32) 来获取查询结果的特定元素。 IQueryable entities = db.MyEntities.Where(p => p.Fo
这似乎是一个愚蠢的问题,但我还没有找到答案,所以就在这里。 :) 在这两种情况下,如果您未能检查集合的边界,您将得到一个“超出范围”的异常。这只是编码风格偏好吗? 如果有人需要示例: List myL
我目前正在构建一个非常依赖效率的数据结构。 任何人都可以向我提供有关 Find(item => item.X = myObject.Property) 方法实际工作原理的资源吗?它是否在所有元素中线性
Linq 中是否有与ElementAt 相同的方法?除了它返回 IEnumerable使用单个元素,而不是实际元素?是不是有一些SelectRange(startIndex, endIndex)我可以
我使用 (ElementAt,Count) 和 (foreach) 遍历 IEnumerable 作为 Linq 查询的结果。令我惊讶的是,性能差异是 25-30 倍!这是为什么? IEnumerab
我是一名优秀的程序员,十分优秀!