2011-08-04 37 views
2

我想知道如果我可以挑選社區的大腦...C#數據收集v數據庫查找 - 哪個更高效?

在我正在處理的項目中,需要從鍵值列表中查找值。該列表在軟件的整個生命週期中不會改變。比方說,列表如下:

ID  Name 

1  Apple 
2  Orange 
3  Pear 
4  Banana 

...等等。

我正在考慮實施這個的兩種方法。首先是將列表存儲在某種(尚未確定的)C#數據集合中,然後根據需要在運行時查看所需的值。我正在考慮的第二種方法是將列表存儲在數據庫表(SQL Server 2008,因爲您問過)。然後應用程序可以通過存儲過程在運行時訪問數據庫。

根據用戶從Web表單發出的請求,查找將快速連續發生兩次。

我的查詢是這樣的:這兩種方法哪一種在處理時間方面最有效率?

我意識到這個問題可能沒有確切的答案,但我會歡迎任何意見或想法。

+0

鷹 - 列表內容多久改變一次?任何變化需要多久才能被用戶「看到」? – mikey

+1

直到我們知道列表會有多大,才能認爲你能得到一個好的答案。 –

+0

該列表將包含約100個項目。 – hawkoftheeye

回答

3

在性能方面昂貴的代價通常是磁盤訪問和網絡訪問。

如果您在Web服務器或應用程序服務器的內存(RAM)中有可用的集合,那麼這將比對數據庫的查詢更快。

如果數據不可能經常發生變化或者根本不可能發生變化,那麼可以在內存數據結構中尋找數據結構,如果它有時可以從數據庫中查詢並將其存儲在緩存中,以便訪問該對象時不需要數據庫查詢,直到緩存過期或根據您的需要重置。

+0

我非常認爲這會是這種情況,但從別人那裏得到一些反饋是很好的。非常感謝 – hawkoftheeye

0

使用字典<>,它比往返數據庫快幾個數量級。

+0

我會研究這個。如果我說實話我已經很久沒有用c#編碼了,而且還在找我的腳。非常感謝你的建議。 – hawkoftheeye

+0

您可以在System.Collections.Generic命名空間中找到它。 –

0

如您所述 -

此列表在整個軟件生命週期內不會改變。

我會硬編碼列表到程序中。對於不會改變的列表而言,數據庫開銷並不值得。

+0

無論如何我都不會硬編碼,而是將它放在XML文件或類似的存儲器中,因此可以在不編輯太多代碼的情況下進行更改;-) –

+0

這似乎很明智,您的問題閱讀方式我認爲永遠不會改變。 – ipr101

+0

我可以確認該列表不會更改。該清單應該將諸如「1年」之類的文本詞彙轉換成表示該時間範圍內整天數量的整數。 – hawkoftheeye