Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# linq到对象的最佳对象结构?_C#_Winforms_Linq_Linq To Objects - Fatal编程技术网

C# linq到对象的最佳对象结构?

C# linq到对象的最佳对象结构?,c#,winforms,linq,linq-to-objects,C#,Winforms,Linq,Linq To Objects,我有一个程序,它将数据存储在内存中的对象中,你可以把这些对象想象成内存中的小db。我想使用LINQ to对象对内存中的对象运行一些简单的查询。内存中的对象是否应该使用首选结构。在我深入到这个项目之前,有没有什么好的资源我应该读一下 编辑: 这里有更多关于应用程序的信息 它是一个winforms应用程序,也可以作为服务运行。它将跟踪最大约10k对象的状态。每个对象都是相当独立的,因此我认为我不需要做很多连接(如果有的话)。因为它可以作为服务运行,所以我添加了一个可以查询对象信息的接口。查询将询问问

我有一个程序,它将数据存储在内存中的对象中,你可以把这些对象想象成内存中的小db。我想使用LINQ to对象对内存中的对象运行一些简单的查询。内存中的对象是否应该使用首选结构。在我深入到这个项目之前,有没有什么好的资源我应该读一下

编辑: 这里有更多关于应用程序的信息


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

有很多资源介绍如何执行LINQ到POCO(普通的旧CLR对象)。这里只是一些让你开始


有很多资源介绍了如何执行LINQ到POCO(普通的旧CLR对象)。这里只是一些让你开始


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

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

  • “小db”-你在这里说的有多小?10kb、100kb、1Mb?事实上,我不认为大小与您选择的结构(在限制范围内,如物理RAM!)一样重要,但它可能对其他回答者有所帮助

  • “简单查询”-您能否提供有关对象和查询外观的更多信息?您是否有
    姓名、地址、年龄
    客户
    ,或者您是否更关心
    产品
    ,该产品有多个
    尺寸
    以不同的
    付款方式下的多个
    订单
    。。。或者更复杂的事情

然后是一些想法:

  • 保持对象图/树/层次结构平坦(尤其是要查询的属性)。Linqing on
    where Customer.Zipcode=90210
    where Customer.Address.Zipcode=90210
    似乎没有太大区别,但在我看来,嵌套对象越复杂,框架就越难创建有效的查询

  • 如果您已经预先知道查询是什么,并且它们对您的应用程序很重要,那么您可能应该“构建”数据结构来支持查询,而不是仅仅依赖Linq?举个例子,搜索引擎将其所有数据存储在内存中作为对象(可以很容易地存储为1-2Mb或更多),但查询机制是一对定制的
    哈希表
    (),它们非常快速

说到您的评论将内存中的db想象成小的,有两种“产品”可能对您有用:

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

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


HTH

雷克斯,先问几个问题:

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

  • “小db”-你在这里说的有多小?10kb、100kb、1Mb?事实上,我不认为大小与您选择的结构(在限制范围内,如物理RAM!)一样重要,但它可能对其他回答者有所帮助

  • “简单查询”-您能否提供有关对象和查询外观的更多信息?您是否有
    姓名、地址、年龄
    客户
    ,或者您是否更关心
    产品
    ,该产品有多个
    尺寸
    以不同的
    付款方式下的多个
    订单
    。。。或者更复杂的事情

然后是一些想法:

  • 保持对象图/树/层次结构平坦(尤其是要查询的属性)。Linqing on
    where Customer.Zipcode=90210
    where Customer.Address.Zipcode=90210
    似乎没有太大区别,但在我看来,嵌套对象越复杂,框架就越难创建有效的查询

  • 如果您已经预先知道查询是什么,并且它们对您的应用程序很重要,那么您可能应该“构建”数据结构来支持查询,而不是仅仅依赖Linq?举个例子,搜索引擎将其所有数据存储在内存中作为对象(可以很容易地存储为1-2Mb或更多),但查询机制是一对定制的
    哈希表
    (),它们非常快速

说到您的评论将内存中的db想象成小的,有两种“产品”可能对您有用:

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

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