c# - How to improve search speed in data grid view -
i have datagridview contain student details (first name, last name, gender, degree , burn date)
i write code perform "keyboard search" (for example "load" data locally):
public class studentdetails { public string firstname; public string lastname; public string gender; public string degree; public datetime burndate; }; public list<studentdetails> studentsearchlist = new list<studentdetails>(); // contain dgv searches private void form1_load(object sender, eventargs e) { refreshdatagridview(); } private void refreshdatagridview() { (int = 0; < 1000; i++) { studentdetails sd = new studentdetails(); sd.firstname = getrandomfirstname(); sd.lastname = getrandomlastname(); sd.gender = getrandomgender(); sd.degree = getrandomdegree(); sd.burndate = getrandomburndate(); studentsearchlist.add(sd); addrowtodatagrid(sd); } } bool detailscontain(studentdetails sd, string s) { if (sd.firstname.tolower().contains(s) || sd.lastname.tolower().contains(s) || sd.gender.tolower().contains(s) || sd.degree.tolower().contains(s) || sd.burndate.toshortdatestring().tostring().contains(s)) return true; else return false; } void addrowtodatagrid(studentdetails sd) { string[] row = new string[] { sd.firstname, sd.lastname, sd.gender, sd.degree, sd.burndate.toshortdatestring().tostring() }; datagridview1.rows.add(row); } private void textbox1_textchanged(object sender, eventargs e) { list<studentdetails> list_sd = new list<studentdetails>(); string s = textbox1.text; s = s.tolower().trim(); foreach (studentdetails sd in studentsearchlist) if (detailscontain(sd, s)) list_sd.add(sd); // clear old rows datagridview1.rows.clear(); datagridview1.refresh(); // adding new rows foreach (studentdetails sd in list_sd) addrowtodatagrid(sd); }
my problem searching , have no idea improve speed. tried declare list contain database , fill studentsearchlist last search result until user press on delete character it's not , it's cost memory…
maybe have search algorithm suggest ?
thank you
you need keep records "studentdetails" in array, not in list. thereafter, build additional index-array (unsigned int or short) each searchable field, , sort indices in arrays according values of appropriate fields. thereafter, use binary search each necessary field, log(n).
Comments
Post a Comment