在A程序中循环调用Shell(B.exe),B程序的计算速度降低,B程序中有一个DLL。本来DLL是在A程序中运行的,但数据量大时,A程序循环后吃掉的内存和虚拟内存之和可达G的量级,导致A程序无法继续运行。所以作了个B程序,让它计算一次,就自动关闭,放出内存。但反复执行B程序后,B程序中的DLL计算速度降低,只是原来十分之一的速度。但关闭A和B后,再启动A,调用B,B程序的速度正常。

解决方案 »

  1.   

    B程序中声明DLL,Private Declare Function abc Lib "cde.dll" (ByVal state As Integer) As Integer 
    dim i as Integer
    dim state as integer调用DLL
    i=abc(state)结束程序
      

  2.   

    我是在B程序中做了一个窗口,代码在Form_Load中
      

  3.   

    我是晚上计算的,开过夜的。一开始速度快,三分钟出一个结果。几个小时后,第二天程序的速度突然直线下降,一个小时出一个结果。我把算一小时的任务另开程序算,也就几分钟就得到结果。
    测试程序时,我把每个任务的计算次数设低时,程序没有出现速度直线下降的情况。在A程序中我也Sleep过,没有改观。
      

  4.   

    调用DLL
    i=abc(state)结束程序=====> 关键检查这一步 如何结束的?如何释放的内存?dll 中所有资源是否都释放了?特别是调用API的地方。 此外如果没有问题,就在每次释放间隔中尝试添加一点延时
      

  5.   

    private Form_Load()
    Private Declare Function abc Lib "cde.dll" (ByVal state As Integer) As Integer 
    dim i as Integer
    dim state as integer调用DLL
    i=abc(state)unload me
    end sub
      

  6.   

    还不如用vc写,
    LoadLibary()
    FreeLibary()