我有一个用 C# 编写的 Windows 应用程序,需要从数据库加载 250,000 行,并提供“键入时搜索”功能,这意味着只要用户在文本框中键入内容,应用程序就需要搜索所有 250,000 条记录(其中顺便说一句,单列,每行 1000 个字符)使用like
搜索并显示找到的记录。
我遵循的方法是:
1-应用程序将所有记录加载到类型中List<EmployeeData>
while (objSQLReader.Read())
{
lstEmployees.Add(new EmployeesData(
Convert.ToInt32(objSQLReader.GetString(0)),
objSQLReader.GetString(1),
objSQLReader.GetString(2)));
}
2-在 TextChanged 事件中,使用LINQ
,我搜索(结合正则表达式)并附上IEnumerable<EmployeesData>
到处于虚拟模式的 ListView。
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 中显示项目以显示该项目。
e.Item = new ListViewItem(new String[] {
lstFoundEmployees.ElementAt(e.ItemIndex).DateProjectTaskClient,
e.ItemIndex.ToString() });
虽然lstEmployees
从 SQL Server 加载列表的加载速度相对较快(1.5 秒),在 TextChanged 上搜索,使用 LINQ 搜索需要 7 分钟以上。通过执行以下命令直接通过 SQL Server 进行搜索LIKE
搜索时间不到 7 秒。
我在这里做错了什么?我怎样才能让这个搜索更快(不超过2秒)?这是我的客户的要求。因此,我们非常感谢任何帮助。请帮忙...