求助:为什么编译后运行速度变慢?
我做的是文件共享的网络程序,在开发vfp环境下1秒就刷新的界面,编译后要10秒左右才能刷新。是否是设置的问题,请高手给以解答。
[解决办法]
在
SELECT * FROM z:\jxcgl WHERE ALLTRIM(xsdsbm)==ALLTRIM(temp_list_gk_sp.xsdsbm) INTO cursor temp_jxcgl
之前加上
Declare long GetTickCount In kernel32
lnStartTime = GetTickCount()
并在select 语句之后加上
lnEndTime = GetTickCount()
messagebox(lnEndTime - lnStartTime)
看看数值是多少(单位是毫秒)
[解决办法]
SELECT * FROM z:\jxcgl WHERE ALLTRIM(xsdsbm)==ALLTRIM(temp_list_gk_sp.xsdsbm) INTO cursor temp_jxcgl
这个语句设计时与开发时不应该有性能区别的。
你换个表试试,你换成非映射盘,用本地盘符中的表试试。
[解决办法]
1、先打开表,再SELECT:
SELE 0
USE z:\jxcgl ALIAS jxcgl
SELECT * FROM jxcgl WHERE xsdsbm=temp_list_gk_sp.xsdsbm INTO cursor temp_jxcgl
另外,where条件:ALLTRIM(xsdsbm)==ALLTRIM(temp_list_gk_sp.xsdsbm)
修改为:xsdsbm=temp_list_gk_sp.xsdsbm
这样可以使用vfp的rushmore技术。
2、确保已设置:
SET Collate TO "MACHINE"
vfp开发环境可以存储SET...状态(在注册表中),
但运行环境不会读取注册表中的设置。
3、检查rushmore分析结果:
=SYS(3054,12)
完整的测试代码:
SELE 0
USE z:\jxcgl ALIAS jxcgl
?SET("COLLATE")
=SYS(3054,12)
t1=second()
SELECT * FROM jxcgl WHERE xsdsbm=temp_list_gk_sp.xsdsbm INTO cursor temp_jxcgl
t2=second()
?t2-t1
WAIT