摘要:[VB6] [VB.Net][C#.Net] 使用DoEvents時,降低CPU Loading的方法
當一個程序的代碼需要花很長的時間去執行,比如處理一筆大資料庫時,這時你需要運用DoEvents函數。DoEvents函數可以臨時返回控制器給操作系統,並允許它去觸發其他的事件。
資料出處:http://msdn.microsoft.com/zh-tw/library/bd65th41(VS.80).aspx
一直苦惱著自己開發的程式Process CPU Loading太大,上網查了一下才知道原來是DoEvents這個函數造成。DoEvents並非天下無敵,用了多了會增加負載、影響效率;雖然 DoEvents 雖然會允許VB6進行其他程序作業,但是不會把CPU資源放出來,故透過呼叫 Sleep 讓 CPU 資源得以釋出,不致以 100% 來占用系統。
經小弟測試的結果果然是降低了CPU的Loading,各位可以自己測測看!
VB6:使用DoEvents
For a = 1 To 100000
For b = 1 To 100000
c = c + 1
Me.Text1.Text = c
Me.Label1.Caption = c
DoEvents’將cpu交付給其它程式執行
Next
Next
End Sub
由下圖得知,DoEventsTest.exe一下子就飆到99%了
Public Function MyDoEvents(Optional ByVal dwMilliseconds As Long = 1)
MyDoEvents = DoEvents()
Sleep dwMilliseconds
End Function
用myDoEvents的確讓人興奮,99%變0%了,但別忘了它有sleep,run的速度是會比DoEvents慢很多的喔,自行拿捏吧,sleep的單位秒數是ms,所以sleep 1就是休息0.01 Sec
使用.Net Framework :Application.DoEvents( ) - 將cpu交付給其它應用式
+
使用.Net Framework :System.Threading.Thread.Sleep - 降低cpu loading
名稱 | 說明 |
---|---|
Thread.Sleep (Int32) | 在指定的時間內暫止目前的執行緒。 受 .NET Compact Framework 支援。 |
Thread.Sleep (TimeSpan) | 封鎖目前執行緒一段指定的時間。 |
VB.NET:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
For i As Integer = 0 To 10000
Me.ListBox1.Items.Add(i.ToString)
My.Application.DoEvents()
System.Threading.Thread.Sleep(1)
Next
End Sub
End Class
C#.NET:
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
int i = 0;
while (i < 10000)
{
listBox1.Items.Add (i.ToString() + "\r\n");
Application.DoEvents();
System.Threading.Thread.Sleep(1);
i++;
}
}
}
}
使用.Net Framework :System.Threading.Thread( ) - 多執行緒
多執行緒與DoEvents的定義不同,故不在此篇討論中。
若有謬誤,煩請告知,新手發帖請多包涵
Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET