我有進口產品註冊的日常文件,並將它們添加到我們的數據庫的過程。最初這個過程會針對每個記錄多次查詢數據庫以確定如何處理數據。加快通過詞典循環在VB.Net 2008
爲了加快這一過程並防止任何人嘗試使用使用相同數據庫的報告站點可能會出現的超時問題,我更改了代碼以將一些表格拖入字典中,然後遍歷它們以查看該客戶/地址/經銷商是否存在,並且如果確實存在,則從該字典的關鍵字中提取Id,或者將其插入表中,然後將其插入表中,如果不存在,則將其插入表中。
但是,我目前發現這比運行慢比我多次爲每個註冊查詢數據庫。我能想到的一個可能的原因是我的字典非常大(一個有800萬個條目,另一個有1100萬個)。
下面是我在做什麼一個例子:
For Each kvp As KeyValuePair(Of Int64, String) In dCust
If kvp.Value = firstName & "|" & lastName & "|" & companyName & "|" & addrId & "|" & typeID & "|" & phone & "|" & email Then
custId = kvp.Key
Exit For
End If
Next
這本詞典中有大約11萬條記錄。
一個想法我的一個同事曾是循環之前運行Dictionary.ContainsValue()
,看看它甚至在那裏。如果它不是完全跳過循環。我只想嘗試一下,如果運行速度比只執行循環本身更快,如果他們採取相同的時間,我沒有看到基本上運行循環兩次的一個點。
所以我的問題給你:
- 我在最 effiecient的方式去這件事?
- 會是更快 運行
Dictionary.ContainsValue()
試圖循環,或將 系統將其解釋爲同樣的事情 ,因此我加倍的時間之前 ? - 還有什麼,我應該尋找?
您正在計算'firstName&「|」 &lastName&「|」 &companyName&「|」 &addrId&「|」 &typeID&「|」 &phone&「|」和電子郵件「1100萬次?在循環之前嘗試計算一次。 – Gabe 2011-05-17 21:24:52
@加貝,你擊敗了我50秒! – 2011-05-17 21:26:27
Dictionary.Values總是唯一的嗎?如果是這樣,反轉鍵值對(如幾個響應註釋)是一個好主意。 – clweeks 2011-05-17 21:39:08