linq对象的最佳对象结构?

时间:2009-03-14 02:14:09

标签: c# winforms linq linq-to-objects

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

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

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

2 个答案:

答案 0 :(得分:4)

雷克斯,首先提出几个问题:

  • 这是一个WinForms / WPF应用程序还是ASP.NET?可能是相关的,因为当为每个用户/ sesion / etc复制时,内存中的“小”足迹可能变得“大”。

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

  • '简单查询' - 您能提供有关对象和查询外观的更多信息吗?您有Customer Name,Address,Age,或者您是否更多考虑Products多个Sizes多个OrdersPaymentwhere Customer.Zipcode = 90210 ......还是更复杂的东西?

然后有些想法:

  • 保持对象图/树/层次结构平坦(特别是您要查询的属性)。 where Customer.Address.Zipcode = 90210上的Linqing与Hashtables似乎没什么不同,但在我看来,嵌套对象越复杂,框架创建高效查询就越困难。

  • 如果您已经提前了解了哪些查询,并且它们对您的应用程序很重要,那么您是否应该“构建”数据结构以支持查询而不仅仅依赖于Linq?举一个例子,searcharoo.net搜索引擎将所有数据作为对象存储在内存中(可以很容易地为1-2Mb或更多),但查询机制是一些自定义Indexed Linq({{3} })非常快。

说到你的评论认为内存中的小数据库,有两种“产品”可能对您有用:

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

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

HTH

答案 1 :(得分:1)

有很多资源显示如何执行LINQ to POCO(Plain Old CLR Objects)。这里有一些让你入门的事情......

MSDN Overview

Simple Example Code

Detailed Example Code