簡體   English   中英

什么是更好的方法性能明智的選擇

[英]What is a better approach performance wise

可以說我需要從數據庫中獲取一些記錄,並根據枚舉類型屬性對其進行過濾。

  • 獲取List<SomeType>
  • SomeType.SizeSomeType.Size
  • 枚舉Size { Small, Medium, Large }

顯示記錄時,“大小”過濾器將有一個預定義的值(例如“中”)。 在大多數情況下,用戶將通過預定義的值從過濾的數據中選擇一個值。 用戶可能還會過濾為大,然后過濾為中,然后再次過濾為大。

我在相同的情況下有不同的情況:

  • 列表包含少於100條記錄和3-5個屬性
  • 列表包含100-500條記錄和3-5個屬性
  • 列表包含最多3-5條屬性的2000條記錄

我最好的方法是什么? 我應該有一個包含每個枚舉的網格的選項卡,還是應該有一個通用枚舉並始終進行過濾,或者?

我會在數據庫上進行過濾,如果索引了這些字段,我懷疑擁有db過濾器比事實之后使用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的含義。 如果您不關心數據庫的可讀性,則可以省略這些表,而只創建一個索引列。

內存通常很便宜。 否則,您可以一次性對所有值進行排序,然后根據比較結果將其檢索為O(n)。 您可以跟蹤事物的位置並以這種方式更快地進行檢索。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM