C# 庞大的长期和长期投资清单;搜索最近元素

C# 庞大的长期和长期投资清单;搜索最近元素,c#,list,search,C#,List,Search,情况是这样的 我有一些对象包含: a起始长 结尾long 一个字符串代码 这些对象的长度是连续的。 例如: var obj1 = new {From = 0, To = 16777215, Code = "aaa"}; var obj2 = new {From = 16777216, To = 16777471, Code = "bbb"}; 几乎有15万个这样的对象 目前,我将所有内容都存储在SQL表中 问题是我需要从这个列表中搜索。例如,我需要查找编号为16777470的对象,它将是对

情况是这样的

我有一些对象包含:

  • a起始
  • 结尾
    long
  • 一个
    字符串
    代码
这些对象的长度是连续的。 例如:

var obj1 = new {From = 0, To = 16777215, Code = "aaa"};
var obj2 = new {From = 16777216, To = 16777471, Code = "bbb"};
几乎有15万个这样的对象

目前,我将所有内容都存储在SQL表中

问题是我需要从这个列表中搜索。例如,我需要查找编号为16777470的对象,它将是对象2“bbb”


问题:有没有一种有效的方法可以在内存中存储这么多的对象,并能够在其中查找元素,有一个很长的时间并查找最近的元素?

从内存效率的角度来看,我不确定

思考:您当然也不想搜索整个列表,因此可能需要某种二级结构(某种索引或查找??)

不管怎样,我偶然发现了这个:

怀疑此方法可能需要占用位处理器,因为它没有辅助索引


希望这有帮助。

如果对象是连续的,那么您只需要存储“发件人”编号

var obj1 = new {From = 0, Code = "aaa"};
var obj2 = new {From = 16777216, Code = "bbb"};
这将节省内存

然后,如果所有的对象都在一个有序的列表中,一个二进制切块应该能够解决有效的搜索


主要的性能问题可能是首先设置列表,因此我认为建议使用SQL数据库可能是明智的。

在排序列表上,二进制搜索可以工作。即使对象的平均值为50字节,总数也不到8MB:可以放入许多当代CPU的缓存中。也就是说,不是很大。而且需要内存吗?因为有很多有效的方法可以在SQL上实现这一点。目前它已经在SQL中,但我担心它,因为这种查找每分钟会发生数千次,我不想让已经被高度请求的数据库过载:)。