以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  关于狐表启动速度问题?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=3172)

--  作者:baoxyang
--  发布时间:2009/6/17 9:29:00
--  关于狐表启动速度问题?
老大,可否给一些建议,如何防止起启速度慢的注意事项及建议,以便初学者提供考参。因做好的应用软件启动速度慢,会给开发软件带来很大麻烦及使用者的怀疑。我现就遇到这样的问题,因我才都是使用外部数据表,在打开项目时,超慢呀!但又不知如何解决?
--  作者:yangming
--  发布时间:2009/6/17 9:36:00
--  
我的建议:打开项目时选不要加载太多的数据或是加载太多的表,完全打开后再根据需要加载
--  作者:狐狸爸爸
--  发布时间:2009/6/17 9:36:00
--  
很多因素都会影响启动速度,但是看不到你的设计,不知道什么原因。

我估计你的表态多,关联太多。

基本规则:

1、同样结构的数据,应该一个表保存,用动态加载来管理;不应该分开成很多表,有的人完全结构相同的表,分开20个表保存,想快都难。
2、控制关联的数量
3、不用默认打开全部窗口。

也可以看看下面的内容:

双向关联的影响


Foxtable的双向关联功能,使得相关数据信手拈来,为我们查看数据带来了极大的便利。
但是关联较多的时候,双向关联对于性能是有较大影响的,特别是打开项目的速度会明显变慢。
例如一个项目包括客户、产品、雇员、订单、订单明细五个表,这五个表建立了四个关联:

父表 子表 关联列
客户 订单 客户编号
雇员 订单 雇员编号
产品 订单明细 产品编号
订单 订单明细 订单编号


当我们将主表切换到客户表的时候,会出现5个Table,分别为:


Tables("客户")
Tables("客户.订单")
Tables("客户.订单.雇员")
Tables("客户.订单.订单明细")
Tables("客户.订单.订单明细.产品")


实际上,切换到任何一个主表,都会出现5个Table,用于显示相关联的数据,也就是说现在这个项目虽然只有5个Datatable,但是因为关联的存在,出现了25个Table。
打开项目的时候,要分别生成这25个Table,运行的过程中还要维护这25个Table,自然对性能会有影响,而且随着关联的增加,Table的数量可能会以平方数增长的。

我们可以关闭双向功能,减轻这种影响,在关闭双向关联的情况下,将主表切换到客户表的时候,会出现3个Table,分别为:


Tables("客户")
Tables("客户.订单")
Tables("客户.订单.订单明细")


将主表切换到订单表的时候,会出现2个Table,分别为:


Tables("订单")
Tables("订单.订单明细")


在关闭双向关联的时候,Table的数量将减少一半,所以性能会有所提升。
如果要关闭双向关联,可以在项目属性设置中,将双向关联属性设为False,然后重新打开项目即可。


表达式列的影响


表达式列的存在,特别是用表达式列引用父表数据,或用聚合函数统计子表数据时,会对批量修改数据、同步表、以及导入和合并数据等操作,带来较大的性能损失。
我们可以在执行此类代码之前,先清楚表达式,在执行结束后,再恢复表达式。


请参考:


D
ataTables("某表1").DataCols("某列1").Expression = ""
DataTables(
"某表1").DataCols("某列2").Expression = ""
DataTables(
"某表2").DataCols("某列1").Expression = ""
\'原来的代码

DataTables(
"某表1").DataCols("某列1").Expression = "原来的表达式"
DataTables(
"某表1").DataCols("某列2").Expression = "原来的表达式"
DataTables(
"某表2").DataCols("某列1").Expression =
"原来的表达式"


[此贴子已经被作者于2009-6-17 9:39:32编辑过]

--  作者:baoxyang
--  发布时间:2009/6/17 9:41:00
--  
谢老大指点!有关此方面,还得摸索呀。可否帮我看下?



--  作者:狐狸爸爸
--  发布时间:2009/6/17 9:43:00
--  

抱歉,目前我没有时间细看你的设计
你可以将项目传上来,让大家一起分析分析。

[此贴子已经被作者于2009-6-17 9:42:59编辑过]

--  作者:baoxyang
--  发布时间:2009/6/17 9:45:00
--  

哦,先研究下。再优化下。不行,再找老大帮忙。


--  作者:baoxyang
--  发布时间:2009/6/17 9:46:00
--  

可能跟Yangming版主提到找开表可能是多了一点。


--  作者:狐狸爸爸
--  发布时间:2009/6/17 9:53:00
--  

可以考虑做成两个,甚至多个项目,各自负责处理某些任务,共享外部数据源,这样就快了。


--  作者:kylin
--  发布时间:2009/6/17 10:14:00
--  
以下是引用狐狸爸爸在2009-6-17 9:53:00的发言:

可以考虑做成两个,甚至多个项目,各自负责处理某些任务,共享外部数据源,这样就快了。

应该要这样做的,没有用到的就不必要加载
如果习惯上不想切割系统的话,就考虑动态加载


--  作者:baoxyang
--  发布时间:2009/6/17 10:46:00
--  
好建议!研究下动态加载最佳方式。