1

我有一个程序将数据存储在内存中的对象中,您可以将其视为内存中的小型数据库。我想使用 LINQ to Objects 对内存中的对象运行一些简单的查询。是否有一个我应该用于内存对象的首选结构。在深入这个项目之前,我应该阅读任何好的资源吗?

编辑:这是有关该应用程序的更多信息。

它是一个 winforms 应用程序,也可以作为服务运行。它将最多跟踪大约 10k 个对象的状态。每个对象都是相当独立的,所以我认为我不需要做很多连接(如果有的话)。因为它可以作为服务运行,所以我添加了一个可以查询对象信息的接口。查询将提出问题并将不修改它们的对象分组。每个对象看起来更像是一个客户对象,而不是一个产品对象。

4

2 回答 2

4

雷克斯,先问几个问题:

  • 这是 WinForms/WPF 应用程序还是 ASP.NET?可能是相关的,因为当为每个用户/会话/等复制时,内存中的“小”占用空间可能会变得“大”。

  • 'small db' - 你在这里说的有多小?10kb、100kb、1Mb?实际上,我认为大小并不像您选择的结构那么重要(在限制范围内,例如物理 RAM!),但它可能对其他回答者有帮助。

  • '简单查询' - 你能提供更多关于对象和查询的信息吗?您是否有一个Customerwith Name,Address,Age,或者您是否更多地考虑Products将多个Sizes放置在多个Orders具有不同Payments 的多个中......或者更复杂的东西?

然后是一些想法:

  • 保持对象图/树/层次结构平坦(特别是您希望查询的属性)。Linqing onwhere Customer.Zipcode = 90210似乎并没有太大的不同,where Customer.Address.Zipcode = 90210但在我看来,嵌套对象越复杂,框架创建高效查询的难度就越大。

  • 如果您已经提前知道查询将是什么,并且它们对您的应用程序很重要,那么也许您应该“构建”数据结构来支持查询,而不是仅仅依赖 Linq?举个例子,searcharoo.net搜索引擎将其所有数据作为对象存储在内存中(很容易达到 1-2Mb 或更多),但查询机制是一对非常快速的自定义Hashtablesref )。

谈到您的评论,将内存中的小型数据库视为小型数据库,有两种“产品”可能对您有用:

  • 索引 Linq应该允许您在对象集合上指定索引以使某些查询更快。这是一项正在进行的工作,但可能对您的需求有用。

  • ComponentOne LiveLinq的网站说“LiveLinq 使用索引和其他优化来加速内存中的 LINQ 查询”。这听起来很像Indexed Linq,但将是一个商业产品。

高温高压

于 2009-03-15T06:35:04.017 回答
1

有很多资源展示了如何执行 LINQ to POCO(普通旧 CLR 对象)。这里有一些可以帮助您入门...

MSDN 概述

简单示例代码

详细示例代码

于 2009-03-14T11:25:31.367 回答