2013-04-22 61 views
1

我正在考虑维护小固定有限数量对象(几十个)的集合的有效方法,这将非常频繁地更改(每秒至少几次每秒几十次)。 是否有一个现有的排序集合,它具有更新现有插入项目的关键(排名)的功能?Efficent C#对固定数量的可变对象进行排序收集

让我们考虑以下项目的定义:

public class Item 
{ 
    public decimal Ranking { get; private set; } 
    public IIdentity Identity { get; private set; } 
    public IOtherInfo OtherInfo { get; private set; } 
} 

我要的那些项目(通常更新排名,有时前面的排名无效 - 这可以通过设置排名为0或无限是,例如简化)的输入流。 Identity值只有很少的变化(它可以很快地转换为索引0到N),OtherInfo可以改变(但它可以很容易地存储在单独的查找数组中),最重要的是, 。 我正在考虑SortedCollection,但是无论何时排名变化(很常见),都需要删除和阅读项目,这听起来效率很低。

任何建议集合,允许更新的项目和它的采取在收集将不胜感激。

+0

散列集呢? – 2013-04-22 16:45:46

+0

哈希集未被排序。 – 2013-04-22 16:48:38

+3

鉴于如果物品的数量非常小(几十件物品是无物),我非常怀疑它会很重要。即使是很差的数据结构也不会对小数据集产生任何问题。最重要的是,每秒更新内容几十次*不是很多。这还需要数百毫秒才能完成更新。这应该只需要几十*纳秒*。即使采用平庸的实现方式,您也可以每秒更新数百次。 – Servy 2013-04-22 16:50:19

回答

1

对于你正在报告的负载,我想说你应该使用一种数据结构,它可以提供更好的可维护性,而不必担心会挤出一些额外的CPU周期。使用SortedListSortedSet,只有在遇到不可接受的结果时才担心提高性能。

我会说,这是premature optimization is the root of all evil其中的一种情况。

+0

这是绝对有效的一点。我仍然没有坚实的数字。但强烈预计这是一个弱点。在我的应用程序中将会有数百个这样的结构,并且会有(N×数百)相应的并发数据流(通过本地千兆位链路流式传输) – Jan 2013-04-22 18:47:15

+0

其余应用程序将非常简单(消耗数据)需要同步。然而那些结构会消耗那些多线程的数据。 认为例如关于来自多个来源的股票价格的汇总。 我应该在我的问题中提到这一点,但我不想添加令人分心的细节 – Jan 2013-04-22 18:54:35

+0

您需要这些集合是线程安全的这一事实是相当大的事实,而您提到的其他要点表明存在架构决策这也应该考虑到......我建议要么重新工作或(可能更好)创建一个新的问题,以包括这些点 – 2013-04-22 20:55:59

相关问题