jixu2008 发表于 2009-8-31 22:15:17

问个有关代码速度问题

<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>&nbsp;</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>&nbsp;</p>
<p>……………………………………………………</p>
<p>&nbsp;</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>&nbsp;</p>
<p>这只是个示例,实际代码是不一样的,我想这个过程可以用其他的替代吗?</p>
<p>或者我怎么样才可以优化代码,使其速度能够快点?</p>

Qxwlm 发表于 2009-9-1 02:14:15

<p>是否你的启动画面有大幅的图片、启动画面的Load过程有太多的对象加载?</p>
<p>或者</p>
<p>你把需要加载的对象、初始化都放到主程序中,单设置一个启动画面。</p>
<p>例如:Form1为启动窗体,Form2为主程序。工程的启动窗体为Form2</p>
<p>Privete sub Form2_Load()</p>
<p>&nbsp;&nbsp; Form1.Show</p>
<p>&nbsp;&nbsp; 有关初始化的代码,对象的加载等</p>
<p>&nbsp;&nbsp; Unload Form1</p>
<p>&nbsp;&nbsp; Me.Show</p>
<p>End Sub</p>
[此贴子已经被作者于2009-9-1 2:14:59编辑过]

jixu2008 发表于 2009-9-1 04:44:59

<p>我的启动界面是frmsplash,有3个timer控件,其中检测注册表键值,然后才是主程序。</p>
<p>但我在模块内public了一些变量数组和过程。</p>

Qxwlm 发表于 2009-9-1 14:19:58

<p>1、启动窗体:frmSplash,</p>
<p>&nbsp;&nbsp; 上面除了你的3个Timer控件外,再加两个Timer控件,名称为TimeLoad和TimeCheck,Enabled属性为Falsh,InterVal属性为10。</p>
<p>&nbsp;&nbsp; 一个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/>&nbsp;&nbsp; Me.Show<br/>&nbsp;&nbsp; blnLoad = False<br/>&nbsp;&nbsp; TimeLoad.Enabled = True<br/>End Sub</font></p>
<p><font face="Verdana">Private Sub TimeLoad_Timer()<br/>&nbsp;&nbsp; intLoad = intLoad + 1<br/>&nbsp;&nbsp; If intLoad &gt;= 3 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TimeLoad.Enabled = False<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; frmInit<br/>&nbsp;&nbsp; End If<br/>End Sub</font></p>
<p><font face="Verdana">Private Sub frmInit()<br/>&nbsp;&nbsp; TimeCheck.Enabled = True<br/>&nbsp;&nbsp; Timer1.Enabled = True<br/>&nbsp;&nbsp; Timer2.Enabled = True<br/>&nbsp;&nbsp; Timer3.Enabled = True<br/>&nbsp;&nbsp; '其他的检测代码<br/>End Sub</font></p>
<p><font face="Verdana">Private Sub TimeCheck_Timer()<br/>&nbsp;&nbsp; If blnLoad = True Then</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TimeCheck.Enabled = False<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; frmMain.Show<br/>&nbsp;&nbsp; End If<br/>End Sub</font></p>
<p><font face="Verdana">Private Sub labInfo_Click()<br/>&nbsp;&nbsp; On Error Resume Next<br/>&nbsp;&nbsp; Unload frmSplash<br/>&nbsp;&nbsp; Set frmSplash = Nothing<br/>&nbsp;&nbsp; Unload frmMain<br/>&nbsp;&nbsp; Set frmMain = Nothing<br/>&nbsp;&nbsp; End<br/>End Sub</font></p>
<p><font face="Verdana">'说明:在检测代码中,如果通过,则设置blnLoad = True ,反之,blnLoad = False,并且显示labInfo。</font></p>
<p>&nbsp;</p>
<p>frmMain的代码:</p>
<p><font face="Verdana"><br/>Private Sub Form_Load()<br/>&nbsp;&nbsp; frmSplash.ZOrder<br/>&nbsp;&nbsp; Me.Enabled = False<br/>&nbsp;&nbsp; '其他的代码<br/>&nbsp;&nbsp; Unload frmSplash<br/>&nbsp;&nbsp; Set frmSplash = Nothing<br/>&nbsp;&nbsp; Me.Enabled = True<br/>End Sub<br/></font></p>

马大哈 发表于 2009-9-2 04:35:29

<p>现在关键是需要搞清楚时间浪费在哪里</p>
<p>&nbsp;</p>
<p>建议在每个窗体的<font face="Verdana">Initialize</font>事件里打印一下GetTickCount的值,以便分析启动时间.</p>
<p>&nbsp;</p>
<p>没搞清楚时间浪费在哪里前,先不忙去动代码............</p>

jixu2008 发表于 2009-9-2 07:03:05

<p>老马方法不错,去查找原因</p>
<p>谢谢两位的回答。</p>
页: [1]
查看完整版本: 问个有关代码速度问题