问个有关代码速度问题
<p>我最近做了个跟工作有关的自动计算软件,由于需要生成很多的随机数字,而且数字很不规范,用了很多个公式,都是在模块里public定义的。</p><p>启动画面很慢,我想事不是和我的public sub jisuan1()过多有关?</p>
<p>比如:</p>
<p>public sub jisuan1()</p>
<p>for i =0 to 20</p>
<p>随机数字(i)=随机数字+20*rnd()</p>
<p>next i</p>
<p>end sub</p>
<p>public sub jisuan2()</p>
<p>for i =0 to 20</p>
<p>随机数字(i)=随机数字+20*rnd()</p>
<p>next i</p>
<p>end sub</p>
<p> </p>
<p>public sub jisuan3()</p>
<p>for i =0 to 20</p>
<p>随机数字(i)=随机数字+20*rnd()</p>
<p>next i</p>
<p>end sub</p>
<p> </p>
<p>……………………………………………………</p>
<p> </p>
<p>public sub jisuan25()</p>
<p>for i =0 to 20</p>
<p>随机数字(i)=随机数字+20*rnd()</p>
<p>next i</p>
<p>end sub</p>
<p> </p>
<p>这只是个示例,实际代码是不一样的,我想这个过程可以用其他的替代吗?</p>
<p>或者我怎么样才可以优化代码,使其速度能够快点?</p> <p>是否你的启动画面有大幅的图片、启动画面的Load过程有太多的对象加载?</p>
<p>或者</p>
<p>你把需要加载的对象、初始化都放到主程序中,单设置一个启动画面。</p>
<p>例如:Form1为启动窗体,Form2为主程序。工程的启动窗体为Form2</p>
<p>Privete sub Form2_Load()</p>
<p> Form1.Show</p>
<p> 有关初始化的代码,对象的加载等</p>
<p> Unload Form1</p>
<p> Me.Show</p>
<p>End Sub</p>
[此贴子已经被作者于2009-9-1 2:14:59编辑过] <p>我的启动界面是frmsplash,有3个timer控件,其中检测注册表键值,然后才是主程序。</p>
<p>但我在模块内public了一些变量数组和过程。</p> <p>1、启动窗体:frmSplash,</p>
<p> 上面除了你的3个Timer控件外,再加两个Timer控件,名称为TimeLoad和TimeCheck,Enabled属性为Falsh,InterVal属性为10。</p>
<p> 一个Label控件,名称为labInfo</p>
<p>主程序窗体:假设为frmMain。</p>
<p>2、工程的启动窗体为frmSplash</p>
<p>3、代码:</p>
<p>frmSplash的代码:</p>
<p><font face="Verdana">Option Explicit<br/>Private intLoad As Integer<br/>Private blnLoad As Boolean '在你的注册表检测代码中,如果检测通过,则为真,反之,则为假,并且显示labInfo<br/></font></p>
<p><font face="Verdana">Private Sub Form_Load()<br/> Me.Show<br/> blnLoad = False<br/> TimeLoad.Enabled = True<br/>End Sub</font></p>
<p><font face="Verdana">Private Sub TimeLoad_Timer()<br/> intLoad = intLoad + 1<br/> If intLoad >= 3 Then<br/> TimeLoad.Enabled = False<br/> frmInit<br/> End If<br/>End Sub</font></p>
<p><font face="Verdana">Private Sub frmInit()<br/> TimeCheck.Enabled = True<br/> Timer1.Enabled = True<br/> Timer2.Enabled = True<br/> Timer3.Enabled = True<br/> '其他的检测代码<br/>End Sub</font></p>
<p><font face="Verdana">Private Sub TimeCheck_Timer()<br/> If blnLoad = True Then</font></p>
<p><font face="Verdana"> TimeCheck.Enabled = False<br/> frmMain.Show<br/> End If<br/>End Sub</font></p>
<p><font face="Verdana">Private Sub labInfo_Click()<br/> On Error Resume Next<br/> Unload frmSplash<br/> Set frmSplash = Nothing<br/> Unload frmMain<br/> Set frmMain = Nothing<br/> End<br/>End Sub</font></p>
<p><font face="Verdana">'说明:在检测代码中,如果通过,则设置blnLoad = True ,反之,blnLoad = False,并且显示labInfo。</font></p>
<p> </p>
<p>frmMain的代码:</p>
<p><font face="Verdana"><br/>Private Sub Form_Load()<br/> frmSplash.ZOrder<br/> Me.Enabled = False<br/> '其他的代码<br/> Unload frmSplash<br/> Set frmSplash = Nothing<br/> Me.Enabled = True<br/>End Sub<br/></font></p> <p>现在关键是需要搞清楚时间浪费在哪里</p>
<p> </p>
<p>建议在每个窗体的<font face="Verdana">Initialize</font>事件里打印一下GetTickCount的值,以便分析启动时间.</p>
<p> </p>
<p>没搞清楚时间浪费在哪里前,先不忙去动代码............</p> <p>老马方法不错,去查找原因</p>
<p>谢谢两位的回答。</p>
页:
[1]