私はC#で書かれたWindowsアプリケーションをデータベースから読み込み、250,000行の読み込みが必要な「検索時に入力」機能を提供しています。アプリケーションは、like
を使用して250,000レコード(btw、各行が1000文字の単一列)を検索し、見つかったレコードを表示する必要があります。大きなテキストの巨大なリストを検索する最速の方法
私が続くアプローチがされた:
1 - アプリケーションの負荷のすべてのレコードTextChangedイベントで入力List<EmployeeData>
while (objSQLReader.Read())
{
lstEmployees.Add(new EmployeesData(
Convert.ToInt32(objSQLReader.GetString(0)),
objSQLReader.GetString(1),
objSQLReader.GetString(2)));
}
2 - に、LINQ
を使用して、私は正規表現の組み合わせで(検索)、仮想モードのListViewにIEnumerable<EmployeesData>
を添付します。
String strPattern = "(?=.*wood*)(?=.*james*)";
IEnumerable<EmployeesData> lstFoundItems = from objEmployee in lstEmployees
where Regex.IsMatch(Employee.SearchStr, strPattern, RegexOptions.IgnoreCase)
select objEmployee;
lstFoundEmployees = lstFoundItems;
3- RetrieveVirtualItemイベントは、アイテムを表示するためにアイテムをListViewに表示するために処理されます。 lstEmployees
ものの
e.Item = new ListViewItem(new String[] {
lstFoundEmployees.ElementAt(e.ItemIndex).DateProjectTaskClient,
e.ItemIndex.ToString() });
がTextChangedに検索するには、SQL Serverからリストをロードするための比較的高速(1.5秒)にロードされ、それは、LINQを使用して検索するために7分以上かかります。 LIKE
検索を実行してSQL Serverを直接検索するのにかかる時間は7秒未満です。
私はここで間違っていますか?この検索をより速くするにはどうすればいいですか(2秒以下)?これは私のクライアントからの要件です。だから、どんな助けも高く評価されます。助けてください...
@RamiShareef、私は、この質問は正規表現に関するものであると主張しています(実際には何よりも)ので、regexタグを削除しないでください。 –
あなたはオートコンプリートのテキストボックスのようにそれを必要としますか? – JayOnDotNet
ええ..オートコンプリートのテキストボックスのようですが、結果はリストボックスやリストビューに別々に表示されるはずです... – user1130862