我有一個數據表,包括超過300.000記錄,這等於超過2.000.000字。我有一個算法,可以從每個記錄中獲取所有單詞,並且運行良好,但我感覺它看起來很慢。C#數據表過濾器最快的方式
我想加快這個程序。
程序就像那樣;
- 從數據庫獲取所有記錄到數據表。
- 循環數據表並從每條記錄中獲取所有單詞。
- 對於每個單詞檢查新數據表包含該單詞,如果沒有添加到新的數據表。
我搜索了一些關於加速這個程序的標題。
- 使用foreach還是for? (我想,沒有區別)
- 檢查表具有文字或不使用DataTable.Select()或LINQ(LINQ的實際速度更快)
但我擔心的是檢查每個字包含或使一個字段的字段爲主(我不知道它是否有效),或者在沒有檢查的情況下獲取所有字,並且在使用distinc之後完成所有的字詞。
你可以給我一些建議。謝謝。
DataTable dtProducts = getProducts();
bool contains;
string[] keys;
dt.Columns.Add("keyword", typeof(string));
for (int i = 0; i < dtProducts.Rows.Count; i++) //114040
{
keys = GetWords(dtProducts.Rows[i]["name"].ToString().Trim());
foreach (string key in keys)
{
DataRow dr = dt.NewRow();
dr["keyword"] = key;
contains = dt.AsEnumerable().Any(row => key == row.Field<string>("keyword"));
if (!contains)
{
dt.Rows.Add(dr);
}
}
}
你可以顯示一些你使用的代碼,它會讓你更容易給你一些提示。 –
你使用'DataTable'開始的任何原因?這聽起來像你應該只使用一個'HashSet'並且在沒有'DataTable'妨礙的情況下從數據庫中讀取時添加它。 –
可能最有效的方法是在數據庫中進行篩選,而不是先將所有內容加載到內存中。 –