以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  运算速度问题  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=15333)

--  作者:zxyds2000
--  发布时间:2011/12/21 10:12:00
--  运算速度问题

    为了补充商业软件的功能缺欠,我设计一个程序,从商业软件的数据库中读取数据,然后把数据的内容全部写到一组空表中,然后再进行计算处理,这样做是怕由于误操作导致原来商业软件中的数据被破坏。

    我的问题是:在往空表中写数据时耗时太长,更新一次大约需要半个小时(大约10个表,相互之间有关联计算),这样很难做到随时更新。我的硬件系统是intel双核2G,1G内存,但是我看了一下,系统运算时CPU占用只到50%,内存占用只有800M,请各位专家诊断一下是硬件问题,还是算法问题,有没有提高速度的办法。


--  作者:狐狸爸爸
--  发布时间:2011/12/21 10:16:00
--  

代码的质量好坏,速度相差可以上千倍。

帮助有一章讲述这个,建议从这一节开始看看:

http://www.foxtable.com/help/topics/2226.htm

 

 


--  作者:zxyds2000
--  发布时间:2011/12/21 10:31:00
--  

代码大至如下:

        Dim QDdr As DataRow
        Dim QDi As Integer
        Dim QDj As Table = Tables("ProductStructures")
        With DataTables("C_WLQD")
           .DataRows.Clear() 

        End With
        For QDi = 0 To QDj.Rows.Count -1
           QDdr = DataTables("ProductStructures").DataRows(QDi) 

           Dim QDr As Row = Tables("C_WLQD").Rows.AddNew()
           QDr("母件编码") = QDdr("cPSPCode")
           QDr("子件编码") = QDdr("cPSCode")
           QDr("子件名称") = QDdr("存货名称")
           QDr("规格型号") = QDdr("规格型号")
           QDr("计量单位") = QDdr("计量单位")
           QDr("定额含量") = QDdr("直接数量")
           QDr("计划单价") = QDdr("计划单价")
           QDr("金额") = QDdr("金额")
        Next


--  作者:lihe60
--  发布时间:2011/12/21 11:06:00
--  
以下是引用zxyds2000在2011-12-21 10:12:00的发言:

    为了补充商业软件的功能缺欠,我设计一个程序,从商业软件的数据库中读取数据,然后把数据的内容全部写到一组空表中,然后再进行计算处理,这样做是怕由于误操作导致原来商业软件中的数据被破坏。

    我的问题是:在往空表中写数据时耗时太长,更新一次大约需要半个小时(大约10个表,相互之间有关联计算),这样很难做到随时更新。我的硬件系统是intel双核2G,1G内存,但是我看了一下,系统运算时CPU占用只到50%,内存占用只有800M,请各位专家诊断一下是硬件问题,还是算法问题,有没有提高速度的办法。

1、为什么不在“商业软件的数据库”直接计算?

2、解决方法:直接导入数据,是不是快些?


--  作者:zxyds2000
--  发布时间:2011/12/21 11:11:00
--  
在“商业软件的数据库”中直接计算不安全,我试试直接导入数据。谢谢!
--  作者:狐狸爸爸
--  发布时间:2011/12/21 11:13:00
--  

加上两行会快一些:
 
Dim QDdr As DataRow
Dim QDi As Integer
DataTables("C_WLQD").StopRedraw
With DataTables("C_WLQD")
    .DataRows.Clear()
End With
For Each QDdr In DataTables("ProductStructures").DataRows
    Dim QDr As Row = Tables("C_WLQD").Rows.AddNew()
    QDr("母件编码") = QDdr("cPSPCode")
    QDr("子件编码") = QDdr("cPSCode")
    QDr("子件名称") = QDdr("存货名称")
    QDr("规格型号") = QDdr("规格型号")
    QDr("计量单位") = QDdr("计量单位")
    QDr("定额含量") = QDdr("直接数量")
    QDr("计划单价") = QDdr("计划单价")
    QDr("金额") = QDdr("金额")
Next
DataTables("C_WLQD").ResumeRedraw
 
如果速度还是不快,可以看看这个:

http://www.foxtable.com/help/topics/1935.htm


--  作者:狐狸爸爸
--  发布时间:2011/12/21 11:19:00
--  

还可以看看:

 

http://www.foxtable.com/help/topics/2218.htm

 


--  作者:lihe60
--  发布时间:2011/12/21 11:53:00
--  
以下是引用zxyds2000在2011-12-21 11:11:00的发言:
在“商业软件的数据库”中直接计算不安全,我试试直接导入数据。谢谢!

如何不安全,说说看?


--  作者:zxyds2000
--  发布时间:2011/12/21 14:13:00
--  

我尝试直接导入数据,我的外部数据来自sq server2005数据库,数据源路径怎么设置?是链接字符串吗?


--  作者:zxyds2000
--  发布时间:2011/12/21 14:16:00
--  
另外,导入格式怎么指定?