首页 新闻 搜索 专区 学院

linq, List, datatable, Dictionary 模糊匹配速度

0
[待解决问题] 解决于 2011-06-24 18:04
我数据源都是缓存的,所以可以不用考虑读取数据的时间。数据有几万条,因为是AJAX调用比较频繁
linq, List, datatable, Dictionary 这几种方式中,那种方式模糊搜索效果较好?
下面测试了linq的,要100毫秒,datatable要1秒多(循环500次也是这个时间,感觉循环有问题)
这个搜索比较频繁,有没有快点的?

 


public DataTable GetHotledt(string[] arrkey)
{
DataTable dt
= getHoteldata();
DataTable dt1
= new DataTable();
DateTime dts
= DateTime.Now;
//
for (int i = 0; i < 500; i++)
// {
dt.DefaultView.RowFilter
= strFilterSQL(arrkey);

dt1
= dt.DefaultView.ToTable();
// }
Console.WriteLine(
"dt1: " + totalTime(dts, DateTime.Now));
return dt1;
}

public List<SearchData> GetHotel(string[] arrkey)
{
//List<SearchData> list = GetDistrictList();

List
<SearchData> rList = new List<SearchData>();
DateTime dts
= DateTime.Now;
//
for (int i = 0; i < 500; i++)
// {
var linqData
= (from c in list
where (c.CnName.Contains(arrkey[0])) || (c.EngName.Contains(arrkey[0]))
select c)
;

rList
= linqData.ToList<SearchData>();
// }
Console.WriteLine(
"rList: " + totalTime(dts, DateTime.Now));
return rList;
}
private string strFilterSQL(string[] arrkey)
{
StringBuilder sbFilter
=new StringBuilder ();
for (int i = 0; i < arrkey.Length; i++)
{
if (arrkey[i].Trim() != "")
{
if (sbFilter.ToString() != "")
{
sbFilter.Append(
" and ");
}
sbFilter.Append(
"( CnName like '%" + arrkey[i] + "%' or EngName like '%" + arrkey[i] + "%' )");
}
}
return sbFilter.ToString ();
}
private static string totalTime(DateTime start, DateTime end)
{
TimeSpan ts
= end.Subtract(start).Duration();
return ts.TotalMilliseconds.ToString();
}
yuejianjun的主页 yuejianjun | 初学一级 | 园豆:20
提问于:2011-05-25 18:04
< >
分享
所有回答(1)
0

可以分词 + 全文索引

或者 单字索引 + 单字位置表

钧梓昊逑 | 园豆:945 (小虾三级) | 2011-05-25 22:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册