2012-06-20 23 views
0

可以说我需要从数据库中获取一些记录,并根据枚举类型属性进行过滤。显示记录时什么是更好的方法性能明智

  • 取上SomeType.Size
  • 枚举Size { Small, Medium, Large }

List<SomeType>

  • 滤波器,将有尺寸滤波器(例如介质)的预定义值。在大多数情况下,用户将按预定义值从筛选数据中选择一个值。 有可能用户也可以过滤到大,然后过滤到中,然后再过滤到大。

    我有同样的情景不同的情况:

    • 列表包含小于100次的记录和3-5性能
    • 列表包含100-500纪录和3-5性能
    • 列表中包含最多2000个有3-5个属性的记录

    这里我最好的办法是什么?我应该有一个选项卡,将包含每个枚举的网格,或者我应该有一个共同的枚举,并始终过滤,或?

  • +2

    wpf似乎是一个误导标签。 :) – Ani

    +2

    为什么不直接在数据库中查询用户想要的记录?我不认为像这样的相对较小的数字,你会遇到任何问题,你可以将它全部存储在内存中,但通常最简单的方法就是在需要时询问你想要的内容,然后离开缓存到一些中间层。 –

    +0

    “我应该有一个包含每个枚举的网格的选项卡,还是应该有一个共同的枚举并始终过滤?或者?你在问如何在技术上实现查询,或者如何设计UI?如果是后者,这可能不适合你的问题。 –

    回答

    1

    我会做数据库的权利,如果这些领域索引我会怀疑有数据库过滤器,它将比事后过滤c-sharp要快得多。

    当然,您可以随时缓存过滤的数据库结果,以防止多个不必要的数据库调用。

    编辑:作为存储在数据库中的信息,假设你有这个字段设置:

    CREATE TABLE Tshirts 
    (
        id int not null identity(1,1), 
        name nvarchar(255) not null, 
        tshirtsizeid int not null, 
        primary key(id) 
    ) 
    
    CREATE TABLE TshirtSizes 
    (
        id int not null, -- not auto-increment 
        name nvarchar(255) 
    ) 
    
    INSERT INTO TshirtSizes(id, name) VALUES(1, 'Small') 
    INSERT INTO TshirtSizes(id, name) VALUES(2, 'Medium') 
    INSERT INTO TshirtSizes(id, name) VALUES(3, 'Large') 
    
    ALTER TABLE Tshirts ADD FOREIGN KEY(tshirtsizeid) REFERENCES tshirtsize(id) 
    

    然后在C#

    public enum TShirtSizes 
    { 
        Small = 1, 
        Medium = 2, 
        Large = 3 
    } 
    

    在这个例子中,该表TshirtSizes仅用于让读者知道神奇的数字1,2和3是什么意思。如果你不关心数据库的可读性,你可以忽略这些表,并且只需要一个索引列。

    0

    内存通常很便宜。否则,您可以一次性对所有值进行排序,并根据比较结果进行检索,即O(n)。你可以跟踪事物的位置并以这种方式更快地检索。

    相关问题