C#:通过 200 万个对象进行内存高效搜索,无需外部依赖

2024-04-09

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

使用外部依赖项,例如数据库不是一个选择,但是使用内存数据库就可以了。

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

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

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>超过上述类型,或者作为class or a struct,仍然需要大约2GB内存。

有没有更好的办法?


班级中最重要的内存消耗是只读列表的使用。摆脱它,您将减少大约 60% 的内存占用(使用三个标签进行测试):

public class Item
{
    public string Name { get; set; }
    public string Category { get; set; }
    public bool IsActive { get; set; }
    public DateTimeOffset CreatedAt { get; set; }
    public string Tags { get; set; } // Semi-colon separated
}

另外,考虑使用DateTime代替DateTimeOffset。这将进一步减少约 10% 的内存占用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#:通过 200 万个对象进行内存高效搜索,无需外部依赖 的相关文章

随机推荐

  • 具有 Linq-to-SQL 的 ADO.NET 数据服务

    在将 linq to sql 与 ado net 数据服务结合使用时 我遇到了一个奇怪的错误 我有一个连接到远程数据库的简单 silverlight 应用程序 我首先添加了 linq to sql 类并将一个表拖到设计器上 然后我添加了 A
  • 从 Pyspark 中包含时间戳的字符串列中提取日期

    我有一个数据框 其日期格式如下 date May 6 2016 5 59 34 AM 我打算以以下格式从中提取日期YYYY MM DD 所以结果应该是上述日期 2016 05 06 但是当我提取时使用以下内容 df withColumn p
  • Spark 无法再执行作业。执行器创建目录失败

    我们已经有一个小型 Spark 集群运行了一个月 它已经成功执行了作业 或者让我为该集群启动一个 Spark shell 无论我向集群提交作业还是使用 shell 连接到集群 错误总是相同的 root SPARK HOME bin spar
  • Javascript 按布尔属性对对象数组进行排序

    有关实际问题 请参阅最后的编辑 a false true true true true true true true true true true true true true true true true true true true t
  • 如何仅显示可组合项几秒钟?

    我有一个Text可组合在一个Box Box modifier Modifier Text text BlaBla 如何仅显示框 文本几秒钟 您可以使用LaunchedEffect并使用布尔标志延迟并在指定时间后将其设置为 false Com
  • 求 3d 中 2 个任意立方体的交集

    所以 我想找出一个函数 可以让您确定两个任意旋转和大小的立方体是否相交 如果立方体的旋转不是任意的 而是锁定到特定的轴 则相交很简单 您可以通过检查它们的边界来检查它们是否在所有三个维度上相交 以查看它们在所有三个维度上是否相交或在彼此之内
  • 方法和可选参数

    我在 Apple 文档中读到 我们可以在 Objective C 方法调用中使用可选参数 Apple 文档中的示例 采用可变数量参数的方法也是可能的 尽管它们有点罕见 额外的参数用逗号分隔 在方法名称末尾之后 与冒号不同 逗号不是 被视为名
  • 在 vb.net 中进行数学计算,就像在 javascript 中进行 Eval 一样

    有没有什么方法可以解析 vb net 中的字符串 例如内置方法 可以像 Eval 一样进行数学运算 例如 3 7 3 5 作为字符串将返回 2 我不是要求你为我编写这个代码 我只是想知道是否有built in这样做的方法 如果没有我会自己编
  • 将输出从 Python 记录器重定向到 tkinter 小部件

    花了一些时间重定向 stdout 并将输出记录到 tkinter 文本小部件后 我决定需要一些帮助 我的代码如下 usr bin env python from Tkinter import import logging from thre
  • Flask的send_file和send_from_directory有什么区别?

    我仍然不清楚何时使用send file什么时候send from directory 我在受保护的文件夹中有一个文件 我可以通过这两种方法访问该文件 所以也许有人有一个例子可以清楚地表明应该使用哪个函数 app route sfile
  • 无法在 android 中对 ImageViews 使用 srcCompat

    我正在使用设计支持库 23 2 我已在 build gradle 中添加了这些行 因为我的 Gradle 插件版本为 1 5 defaultConfig applicationId com abc xyz minSdkVersion 16
  • Spring Boot GS:ConnectionFactory 的 ComponentScan 和 ClassNotFoundException

    我正在玩 Spring Boot 入门指南 但自动配置失败 我得到 java lang ClassNotFoundException javax jms ConnectionFactory 看来这是由于 Application 类的位置所致
  • 安装以太坊时出错:软件包“ethereum”没有安装候选者

    我按照本文中的步骤在 Ubuntu 17 10 上安装以太坊 https medium com mvmurthy full stack hello world voting ethereum dapp tutorial part 2 30b
  • 在 Android 中动态创建/删除按钮

    首先 如果这个答案已经在这里 我很抱歉 因为我已经搜索了几个星期 但还没有找到任何东西 我正在开发一个 Android 应用程序 它需要允许用户创建和删除按钮 我知道如何通过将按钮添加到 XML 文件并在 JAVA 文件中创建其功能来通常静
  • package.json 中的代理不影响 fetch 请求

    我正在尝试使用 React 从开发服务器获取一些数据 我正在运行客户端localhost 3001和后端port 3000 获取请求 const users fetch api users users then err res gt con
  • 将值设置为 Java 15 记录中的属性之一

    我在代码中使用Java 15预览功能记录 并定义记录如下 public record ProductViewModel String id String name String description float price 在控制器级别我
  • C++20 中是否有一个浮点数包装器,可以让我默认飞船运算符?

    我正在观看 使用 C 20 三路比较 Jonathan M ller Meeting C 2019 演讲 其中提到了包含浮点成员的类的问题 问题源于这样一个事实 涉及 NaN 的 IEEE 754 比较很奇怪 并且不提供总排序 Talk 提
  • 使用 tmap tm_bubble 添加固定大小的中断

    我正在尝试创建一个 tmap 气泡图 其中大小和颜色美观具有相同的固定中断 设置style fixed and breaks c Inf seq 10 10 by 2 5 Inf 正在为颜色变量生成所需的结果 但大小变量保持不变 我正在处理
  • 在同一个类中使用两个 UIPickerView

    我为第一个 UIPickerView 编写了这段代码 void viewDidLoad NSURL url NSURL URLWithString http localhost 8080 Data resources converter c
  • C#:通过 200 万个对象进行内存高效搜索,无需外部依赖

    我需要能够搜索集合大约 200 万个 C 项目 搜索应该可以在多个字段上进行 简单的字符串匹配就足够了 使用外部依赖项 例如数据库不是一个选择 但是使用内存数据库就可以了 主要目标是做到这一点内存效率高 集合中的类型非常简单 没有长字符串