C#:通过200万个对象进行的内存有效搜索,没有外部依赖性

问题描述 投票:1回答:3

我需要能够在一个集合中搜索 C#中大约200万个项目。搜索应该可以在多个字段中进行。简单的字符串匹配就足够了。

使用像不是数据库的外部依赖项],但是可以使用内存数据库。

主要目标是做到这一点[[内存效率

集合中的类型非常简单,没有长字符串:

public class Item { public string Name { get; set; } // Around 50 chars public string Category { get; set; } // Around 20 chars public bool IsActive { get; set; } public DateTimeOffset CreatedAt { get; set; } public IReadOnlyList<string> Tags { get; set; } // 2-3 items }

重点和要求

重点和要求的澄清:

    没有外部依赖项(如数据库)
  • 集合中的可搜索项目(必须是高性能的)
  • 内存效率(200万个项目低于2 GB)
  • 今天的非最佳解决方案

在上述类型上使用简单的List<T>作为classstruct,仍需要大约2 GB的内存。

还有更好的方法吗?

我需要能够在C#中搜索大约200万个项目的集合。搜索应该可以在多个字段中进行。简单的字符串匹配就足够了。使用外部依赖项,例如...
c# performance optimization memory-management in-memory
3个回答
0
投票
您可以做这些点,然后看是否有麻烦:

0
投票
如果您运行的是64位,我不会期望2M对象有任何主要的内存问题。列表的最大大小限制为2Gb,但是引用只有8个字节,因此列表应该在此限制之下。总内存使用量将主要取决于字符串的大小。也将有一些object overhead,但是如果您需要存储多个字符串,这很难避免。

0
投票
为了减少数据的内存占用量,您可以做一些事情,但是可能最容易产生最大影响的事情是将所有字符串都设为intern。或者至少您希望重复很多这些。
© www.soinside.com 2019 - 2024. All rights reserved.