Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
固定数量可变对象的有效C#排序集合_C#_Performance_Sorting_Collections - Fatal编程技术网

固定数量可变对象的有效C#排序集合

固定数量可变对象的有效C#排序集合,c#,performance,sorting,collections,C#,Performance,Sorting,Collections,我正试图寻找有效的方法来维护固定数量的小对象(几十个)的集合,这些对象的变化非常频繁(至少每秒几次到每秒几十次)。 是否有现有的已排序集合具有更新现有插入项的键(排名)的功能 让我们考虑下面的项目定义: public class Item { public decimal Ranking { get; private set; } public IIdentity Identity { get; private set; } public IOtherInfo Other

我正试图寻找有效的方法来维护固定数量的小对象(几十个)的集合,这些对象的变化非常频繁(至少每秒几次到每秒几十次)。 是否有现有的已排序集合具有更新现有插入项的键(排名)的功能

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

public class Item
{
    public decimal Ranking { get; private set; }
    public IIdentity Identity { get; private set; }
    public IOtherInfo OtherInfo { get; private set; }
}
我将有这些项目的输入流(通常更新排名,有时使以前的排名无效-例如,可以通过将排名设置为0或无限来简化)。标识值的变化很小(并且可以快速转换为索引0到N),其他信息可以更改(但是可以轻松地存储在单独的查找数组中),最重要的是排名将快速更改。 我在考虑SortedCollection,但是每当排名发生变化时(通常情况下)就需要删除和阅读条目,这听起来效率很低


任何允许更新项目及其在集合中使用的集合建议都将不胜感激。

对于您报告的负载,我认为您应该使用一种数据结构,该结构有助于更好的可维护性,而不是担心挤出一些额外的CPU周期。选择a或a,只有在遇到不可接受的结果时才担心性能的提高


我想说的是,这是其中的一种情况。

对于您报告的负载,我想说您应该使用一种数据结构,这种结构有助于更好的可维护性,而不是担心挤出一些额外的CPU周期。选择a或a,只有在遇到不可接受的结果时才担心性能的提高


我想说的是,这种情况下,

哈希集没有排序。考虑到项目数量非常小(几十个项目算不了什么),我非常怀疑这是否重要。对于这么小的数据集,即使是糟糕的数据结构也不会有问题。除此之外,每秒更新几十次内容并不是很多。你还需要数百毫秒才能完成更新。这应该只需要几十纳秒。即使是一个普通的实现,你也可能每秒更新数百次。@Vladimir Schmidt请看这里:散列集只包含数据,并提供良好的性能以添加和删除操作,因此使用OrderBy(linq)是获得所需内容的最佳方法,不是吗?散列集是没有排序的。考虑到项目数很小(几十个项目算不了什么),我非常怀疑这是否重要。对于这么小的数据集,即使是糟糕的数据结构也不会有问题。除此之外,每秒更新几十次内容并不是很多。你还需要数百毫秒才能完成更新。这应该只需要几十纳秒。即使是一个普通的实现,你也可能每秒更新数百次。@Vladimir Schmidt请看这里:散列集只包含数据,并提供良好的性能以添加和删除操作,因此使用OrderBy(linq)是获得所需内容的最佳方法,不是吗?这绝对是正确的观点。我仍然没有确切的数字。然而,人们强烈认为这是一个弱点。在我的应用程序中将有数百个这样的结构,并且将有(nx数百)个相应的并发数据流(通过本地千兆链路进行流式传输)。应用程序的其余部分将非常简单(消耗数据),并且不需要同步。但是,这些结构将使用来自这些多线程的数据。例如,考虑来自多个来源的股票价格的集合。我应该在我的问题中提到这一点,但我不想添加分散注意力的细节您需要这些集合是线程安全的,这是一个很大的问题,您提到的其他要点表明,已经做出了一些架构决策,也应该考虑到这些决策。。。我建议您重新工作,或者(可能更好)创建一个新问题来包含这些要点。因此,作为一项建议,如果您的应用程序的这一特定方面非常关键,以至于您已经在寻求从中获得更多性能,那么您应该尽快对其性能进行基准测试。这很公平。听起来我应该从最简单的代码开始,即使它看起来效率很低。然后在执行后返回到它。这是绝对正确的观点。我仍然没有确切的数字。然而,人们强烈认为这是一个弱点。在我的应用程序中将有数百个这样的结构,并且将有(nx数百)个相应的并发数据流(通过本地千兆链路进行流式传输)。应用程序的其余部分将非常简单(消耗数据),并且不需要同步。但是,这些结构将使用来自这些多线程的数据。例如,考虑来自多个来源的股票价格的集合。我应该在我的问题中提到这一点,但我不想添加分散注意力的细节您需要这些集合是线程安全的,这是一个很大的问题,您提到的其他要点表明,已经做出了一些架构决策,也应该考虑到这些决策。。。我建议您重新工作,或者(可能更好)创建一个新问题来包含这些要点。因此,作为一项建议,如果您的应用程序的这一特定方面非常关键,以至于您已经在寻求从中获得更多性能,那么您应该尽快对其性能进行基准测试。这很公平。听起来我应该从最简单的代码开始,即使它看起来效率很低。然后在执行后返回到它。测量