Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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语言中的老化数据结构#_C#_Linq_.net 3.5_Data Structures - Fatal编程技术网

C# C语言中的老化数据结构#

C# C语言中的老化数据结构#,c#,linq,.net-3.5,data-structures,C#,Linq,.net 3.5,Data Structures,我想要一个数据结构,允许查询最近X分钟内有多少项。一个项目可能只是一个简单的标识符或更复杂的数据结构,最好是项目的时间戳将在项目中,而不是存储在项目外部(作为散列或类似内容,不希望多个项目具有相同的时间戳) 到目前为止,似乎使用LINQ I可以轻松地过滤时间戳大于给定时间的项并聚合计数。尽管我还不太确定是否尝试将.NET3.5特定的东西应用到我的生产环境中。对于类似的数据结构还有其他建议吗 我感兴趣的另一部分是老化旧数据,如果我只想在不到6小时前查询项目的数量,我希望从我的数据结构中删除任何比这

我想要一个数据结构,允许查询最近X分钟内有多少项。一个项目可能只是一个简单的标识符或更复杂的数据结构,最好是项目的时间戳将在项目中,而不是存储在项目外部(作为散列或类似内容,不希望多个项目具有相同的时间戳)

到目前为止,似乎使用LINQ I可以轻松地过滤时间戳大于给定时间的项并聚合计数。尽管我还不太确定是否尝试将.NET3.5特定的东西应用到我的生产环境中。对于类似的数据结构还有其他建议吗


我感兴趣的另一部分是老化旧数据,如果我只想在不到6小时前查询项目的数量,我希望从我的数据结构中删除任何比这更早的项目,因为这可能是一个长期运行的程序。

我认为一个重要的考虑因素是查询与添加/删除的频率。如果您经常进行查询(特别是如果您有大量的集合),B-树可能是一种方法:


您可以让一些线程遍历并定期清理此树,或者将其作为搜索的一部分(同样,这取决于使用情况)。基本上,您将执行树搜索以查找“x分钟前”的位置,然后计算节点上更新时间的子节点数。如果将节点下的子节点数保持为最新,则可以快速完成此总和。

可以使用一个简单的链接列表来完成此操作

基本上,您可以在末尾添加新项,并从一开始就删除太旧的项,这是一种廉价的数据结构

示例代码:

list.push_end(new_data)
while list.head.age >= age_limit:
    list.pop_head()

如果列表很忙,需要一次切掉比一个更大的部分,那么我同意,使用树结构或类似的结构,允许在更高的级别上进行修剪。

具有滑动过期的缓存可以完成这项工作

将您的项目放入缓存,缓存将处理老化