This blog is about the dotnet.all types of codes,news about dotnet including asp.net,vb.net,c# and know about new dotnet technology.programing in asp.net,vb.net,c#, ajax, AJAX tech support for .net and discuss the new technology in dotnet.ncluding asp.net,vb.net,c# and know about new dotnet technology.programing in asp.net,vb.net,c#, ajax, AJAX tech support for .net and discuss the new technology in dotnet.asp.net programming,dot net programming,dotnet programs,dotnet source code,source code.

Free Hosting

Free Hosting

Thursday, January 22, 2009

Get the % of cpu usage of a running thread (VB.NET)

Get the % of cpu usage of a running thread (VB.NET)

Version: VB 2005
Compatibility: VB 2005, VB 2008
Category: Miscellaneous

To watch cpu usage from within the thread to be watched:

Dim CPUutil As New ThreadCPUusageWatcher
Dim PercentUsage as Short
CPUutil .Start()

' Use:
CPUutil..NativeThreadID ' to get the id if the current thread, or set the id of the thread to be watched.

PercentUsage = CPUutil .CPUusage ' to get the current percentage of cpu use of the watched thread

To watch the cpu usage of background threads from another (the main?) thread:
declare CPUutil public, and then set it new from with the thread to be watched. Ie:

Public CPUutil as ThreadCPUusageWatcher

' Then, from within the thread to be watched:
CPUutil = New ThreadCPUusageWatcher
CPUutil.Start()

' CPUutil.CPUusage can then be called from any thread.

' Call:
CPUutil.StopWatcher() ' to stop the watcher when your app closes.

Declarations:
Imports System.Diagnostics
Imports System.Threading

Code:
Public Class ThreadCPUusageWatcher

' This class is used to get the % of cpu usage of a running thread by native thread id.
' It's a great way to be able to tell which thread is hammering your cpu. Usage:
' To watch cpu usage from within the thread to be watched:

' Dim CPUutil As New ThreadCPUusageWatcher
' Dim PercentUsage As Short
' CPUutil .Start()

' Use:
' CPUutil..NativeThreadID ' to get the id if the current thread, or set the id of the thread to be watched.

' PercentUsage = CPUutil.CPUusage ' to get the current percentage of cpu use of the watched thread

' To watch the cpu usage of background threads from another (the main?) thread:
' declare CPUutil public, and then set it new from with the thread to be watched. Ie:

' Public CPUutil As ThreadCPUusageWatcher

' Then, from within the thread to be watched:
' CPUutil = New ThreadCPUusageWatcher
' CPUutil.Start()

' CPUutil.CPUusage can then be called from any thread.

' Call:
' CPUutil.StopWatcher() ' to stop the watcher when your app closes.

Private threadID As Int16
Private WatcherRunning As Boolean = False
Private th1 As Thread
Private Percentage As Long

Public Sub New()
threadID = AppDomain.GetCurrentThreadId
End Sub

Public Sub New(ByVal NativeThreadID As Int16)
threadID = NativeThreadID
End Sub

Private Function GetCurrentNativeThreadID() As Int16
GetCurrentNativeThreadID = AppDomain.GetCurrentThreadId
End Function

' Set the native ID of a process thread to be watched, or get your native thread id
Public Property NativeThreadID() As Int16
Get
Return GetCurrentNativeThreadID()
End Get
Set(ByVal value As Int16)
threadID = value
End Set
End Property
Public ReadOnly Property IsRunning() As Boolean
Get
Return WatcherRunning
End Get
End Property

Public ReadOnly Property CPUusage() As Long
Get
Return Percentage
End Get
End Property

Public Sub StopWatcher()
WatcherRunning = False
End Sub
Public Sub Start()
th1 = New System.Threading.Thread(AddressOf StartWatcher)
th1.Start()
End Sub
Private Sub StartWatcher()
Dim tx As System.Diagnostics.ProcessThreadCollection
Dim t, tId, a, a1, a2, a3, a4, a5, CPUs As Int16
Dim CPUtimeEnd, CPUtimeStart As Double

CPUs = Environment.GetEnvironmentVariable("NUMBER_OF_PROCESSORS")

tx = System.Diagnostics.Process.GetCurrentProcess().Threads
tId = 0

For t = 0 To tx.Count - 1
If tx.Item(t).Id = threadID Then
tId = t
End If
Next

If tId = 0 Then
MsgBox("Thread could not be found.")
Exit Sub
End If

WatcherRunning = True

Try
Do While WatcherRunning = True

CPUtimeStart = tx.Item(tId).TotalProcessorTime.Milliseconds
Thread.Sleep(200)
CPUtimeEnd = tx.Item(tId).TotalProcessorTime.Milliseconds

If (CPUtimeEnd > CPUtimeStart) Or (CPUtimeEnd = CPUtimeStart) Then

a = a + 1
If a = 1 Then
a1 = CPUtimeEnd - CPUtimeStart
ElseIf a = 2 Then
a2 = CPUtimeEnd - CPUtimeStart
ElseIf a = 3 Then
a3 = CPUtimeEnd - CPUtimeStart
ElseIf a = 4 Then
a4 = CPUtimeEnd - CPUtimeStart
ElseIf a = 5 Then
a5 = CPUtimeEnd - CPUtimeStart
ElseIf a > 5 Then
a = 1
End If

Percentage = ((a1 + a2 + a3 + a4 + a5) / 5) / 2
Percentage = Percentage / CPUs
If Percentage > 100 Then Percentage = 100
End If

Loop
Catch ex As Exception
MsgBox(ex.Message)
End Try

WatcherRunning = False
End Sub

End Class

0 comments:

dotnet(.Net) Project Source code Downloads and Tutorials

Email Subscrption



Enter your email address:

Delivered by FeedBurner

Feedburner Count

Blog Archive

Unique Visitor

Design by araba-cı | MoneyGenerator Blogger Template by GosuBlogger