1、既然要删除空行,就应该放在最前面,可以让后面的循环语句少循环N次(N等于其后的循环语句个数乘以删除的空行数)也就是这一段放到最前面:
If user.group <> "客服部" Then
DataTables("销售意向客户进度管制") .DeleteFor("[客户名称] Is Null and [联系地址] Is Null and [联系号码] Is Null And [欲购车型] Is Null and [意向级别] Is Null and [建档日期] Is Null and [最后联系日期] Is Null and [下次回访日期] Is Null and [最后一次回访情况] Is Null and [备注] Is Null and [客户来源] Is Null and [业务员申请] Is Null")
End If
这样的话,For Each r As Row In Tables("销售意向客户进度管制")……next就要少运行N次,n 等于删除的空行数,还有后面的遍历循环语句也跟着减少。
2、相同的循环语句可以合并,这样可以少循环N次(N等于该表的总行数):
您原来的For Each r As Row In Tables("销售意向客户进度管制") ……next 和For Each cl As Row In Tables("销售意向客户进度管制")其实遍历的都是一个表【销售意向客户进度管制】的所有行,只需将上述两个循环语句内的代码合并到一起即可。
3、除非万不得已,循环语句中的判断尽可能嵌套在在循环语句外:
当判断条件不成立时,无需循环,而放在循环内,不管是否成立,先循环(遍历)再判断,导致很多时候(条件不成立时),出现N(N等于遍历的总行数)次循环来浪费时间,看这里:
For Each cl As Row In Tables("销售意向客户进度管制")
If user.name <> "销售经理" AndAlso user.name <> "开发者"
cl("客户资料锁定") = True
End If
Next
改成这样:
If user.name <> "销售经理" AndAlso user.name <> "开发者"
For Each cl As Row In Tables("销售意向客户进度管制")
cl("客户资料锁定") = True
Next
End If
调整后,非销售经理或非开发者进入系统时,就无需遍历所有行了,您这种代码的写法应该是犯了循环语句的大忌
4、不必要的循环嵌套,导致系统重复执行某一个相同的动作,多浪费很多时间:
看您的这一段代码:
For Each dt As DataTable In DataTables
For Each cl As Row In Tables("销售意向客户进度管制")
If user.name <> "销售经理" AndAlso user.name <> "开发者"
cl("客户资料锁定") = True
End If
Next
dt.save()
Next
您的第一层遍历所有表的目的,是想对所有表进行保存,而您又将遍历【销售意向客户进度管制】表的所有行的循环语句嵌套到其中,这就导致每遍历一个表,就要遍历【销售意向客户进度管制】表的所有行并判断修改【改客户资料锁定】列的值,这样又多循环了N遍(N等于总表数减1后乘以【销售意向客户进度管制】的总行数,象这种代码,如果确实需要保存所有表,也应该将这两层循环嵌套剥离,正确写法也应该这样:
If user.name <> "销售经理" AndAlso user.name <> "开发者"
For Each cl As Row In Tables("销售意向客户进度管制")
cl("客户资料锁定") = True
Next
For Each dt As DataTable In DataTables
dt.save()
Next
End If
这时候需要注意一下两个循环的先后顺序即可。
5、仅仅修改个别表(或者将来遇到行的类似问题),不必要全部表都要保存,况且保存本来就是比较费时的:
您的这段代码中,可以看出,总共只修改了【销售意向客户进度管制】和经过fill后的数据接收表【意向客户历史回访情况】,那么您无需遍历所有表并保存,这样,少执行N次保存表的代码(N等于总表数减2)正确应该这样即可:
If user.group <> "客服部" Then
DataTables("销售意向客户进度管制").Save()
DataTables("意向客户历史回访情况").Save()
end if
分析到这里,发现我在4楼给的代码最后少了一个判断,昨晚看漏了,无文件也没有测试,等于是丢失了对【客服部】的权限限制,抱歉,自己加上吧。
6、针对您的第一个循环语句For Each r As Row In Tables("销售意向客户进度管制")……next的修改,仅仅是优化了代码,对速度没有什么优化或影响
【注】:通过对您的代码的全部剖析,不难看出第1~5点都是影响进度的地方,尤其3、4、5点尤为严重,上述N个N的总和相信您自己都能算出来,呵呵!
[此贴子已经被作者于2011-9-28 19:01:20编辑过]