Thread / CPU Auslastung

14/04/2010 - 09:39 von Bernd | Report spam
Hallo Community,
folgendes Problem:

Ich verwende verschiedend TcpListener um Daten aus unterschiedliche Ports zu
empfangen und zu verarbeiten - soweit funktioniert das auch:

diese TCPListener laufen jeweils in einem eigenstàndiger Thread

Wenn ich nun einen Thread starte, geht meine CPU Auslastung auf 50% hoch;
bei einem 2. Thread auf 100%

wenn ich den Threads beende wieder auf 0% Auslastung!

ich denke das problem ist, dass ich das lesen aus den Ports in einer
Schleife habe und deshalb die CPU Auslastung jeweils hochgeht!
und hier könnt ich Eure Hilfe brauchen; wie kann ich das lesen von
unterschiedlichen Ports effektiver machen (nicht so CPU lastig)?

hier ein codeschnippsel wie das Ding aufgebaut ist

Dim server As TcpListener
server = Nothing

server = New TcpListener(groupEP)

' Start listening for client requests.
Try
server.Start()
Catch ex As Exception
MsgBox("Error" & vbCr & ex.Message)
End Try

' Buffer for reading data
Dim bytes(1024) As Byte
Dim data As String = Nothing
Dim Source As String() = Nothing
' Enter the listening loop.


Try
While True

My.Application.DoEvents()

If server.Pending() Then

Dim client As TcpClient = server.AcceptTcpClient

.
endif
End While
Catch e As Exception
'MsgBox(e.Message)
Finally
server.Stop()
End Try


Vielen Dank für Euere Hinweise
Bernd
 

Lesen sie die antworten

#1 Armin Zingler
14/04/2010 - 13:09 | Warnen spam
Am 14.04.2010 09:39, schrieb Bernd:
Hallo Community,
folgendes Problem:

Ich verwende verschiedend TcpListener um Daten aus unterschiedliche Ports zu
empfangen und zu verarbeiten - soweit funktioniert das auch:

diese TCPListener laufen jeweils in einem eigenstàndiger Thread

Wenn ich nun einen Thread starte, geht meine CPU Auslastung auf 50% hoch;
bei einem 2. Thread auf 100%

wenn ich den Threads beende wieder auf 0% Auslastung!

ich denke das problem ist, dass ich das lesen aus den Ports in einer
Schleife habe und deshalb die CPU Auslastung jeweils hochgeht!
und hier könnt ich Eure Hilfe brauchen; wie kann ich das lesen von
unterschiedlichen Ports effektiver machen (nicht so CPU lastig)?

hier ein codeschnippsel wie das Ding aufgebaut ist

Dim server As TcpListener
server = Nothing

server = New TcpListener(groupEP)

' Start listening for client requests.
Try
server.Start()
Catch ex As Exception
MsgBox("Error" & vbCr & ex.Message)
End Try

' Buffer for reading data
Dim bytes(1024) As Byte
Dim data As String = Nothing
Dim Source As String() = Nothing
' Enter the listening loop.


Try
While True

My.Application.DoEvents()



Application.DoEvents ist ganz böse. My.Application.DoEvents ist noch böser.
Warum? Siehe Gruppenarchiv. Da du ohnehin schon einen eigenen Thread
startest und dieser kein UI-Thread ist, ist DoEvents reines Placebo,
denn es gibt keine Nachrichten zu verarbeiten.

Du kannst stattdessen einfach server.AcceptTcpClient aufrufen, denn
das ist ein blockierender und nicht CPU-lastiger Aufruf. Wenn du
mit mehreren Clients rechnest, solltest du die Kommunikation dann in einen
eigenen Thread auslagern oder alternativ BeginAcceptTcpClient verwenden.

If server.Pending() Then

Dim client As TcpClient = server.AcceptTcpClient

.
endif
End While
Catch e As Exception
'MsgBox(e.Message)
Finally
server.Stop()
End Try



Armin

Ähnliche fragen