![]() |
Code Teil hat viel zu viel CPU Auslastung
Ich sitze gerade an einem größeren Projekt, in dem mehrere Timer enthalten sind. Da das Programm recht viel an CPU Auslastung hatte, bin ich mal die einzelnen Timer durchgegangen, um zu überprüfen, woran das liegt und habe dabei einen Timer gefunden, der zwischen 15 und 20% CPU benötigt.
Hier mal der Code:
Delphi-Quellcode:
Der Timer6, der noch vorkommt, läuft nur 5 sek, an dem kanns eigentlich nicht liegen und mit dem Timer7 zähl ich nur Sekunden, dass dürfte es auch nicht sein. Das Zeichnen von PaintBoxen hab ich auch an anderen Stellen des Programms, wo es auch keine Probleme gibt.
procedure TForm2.Timer5Timer(Sender: TObject);
var vQuery: TWmiQuery; vConnection: TWmiConnection; down, up : LongInt; mx, mx1, my, my1, i, ra, ra1 : Integer; begin down := 0; up := 0; if IsInternetConnected = true then begin Timer6.Enabled := true; Timer7.Enabled := true; try vQuery := TWmiQuery.Create(nil); vConnection := TWmiConnection.Create(nil); try vQuery.Connection := vConnection; vQuery.WQL.Text := 'select * from Win32_PerfFormattedData_Tcpip_NetworkInterface WHERE Name="Sinus 154 stick - Paketplaner-Miniport"'; vQuery.Open; down := round(vQuery.FieldValues['BytesReceivedPersec']/1024); vQuery.WQL.Text := 'select * from Win32_PerfFormattedData_Tcpip_NetworkInterface WHERE Name="Sinus 154 stick - Paketplaner-Miniport"'; vQuery.Open; up := round(vQuery.FieldValues['BytesSentPersec']/1024); finally vQuery.Free; vConnection.Free; end; except end; end; try downgesamt := roundto(downgesamt + (down/1024), -2); upgesamt := roundto(upgesamt + (up/1024), -2); gesamt := StrToFloat(Label46.Caption) + downgesamt; Label41.Caption := FloatToStr(downgesamt) + ' MB'; Label40.Caption := FloatToStr(upgesamt) + ' MB'; Label42.Caption := 'Gesamt: ' + FloatToStr(roundto(gesamt/1024,-2)) + ' GB'; except end; if down > 125 then down := 125; if up > 125 then up := 125; PaintBox3.Refresh; mx := 33; my := PaintBox3.Height; PaintBox3.Canvas.MoveTo(mx, my); PaintBox3.Canvas.Pen.Color := clNavy; for i := 0 to 125 do begin for ra := 25 downto 10 do PaintBox3.Canvas.LineTo(Round(mx-ra*cos(i*Pi/180)), Round(my-ra*sin(i*Pi/180))); end; PaintBox3.Canvas.MoveTo(mx, my); PaintBox3.Canvas.Pen.Color := clblue; for i := 0 to round(down) do begin for ra := 25 downto 10 do PaintBox3.Canvas.LineTo(Round(mx-ra*cos(i*Pi/180)), Round(my-ra*sin(i*Pi/180))); end; PaintBox4.Refresh; mx1 := 21; my1 := PaintBox4.Height; PaintBox4.Canvas.MoveTo(mx1, my1); PaintBox4.Canvas.Pen.Color := clNavy; for i := 180 downto 55 do begin for ra1 := 25 downto 10 do PaintBox4.Canvas.LineTo(Round(mx1-ra1*cos(i*Pi/180)), Round(my1-ra1*sin(i*Pi/180))); end; PaintBox4.Canvas.MoveTo(mx1, my1); PaintBox4.Canvas.Pen.Color := clblue; for i := 180 downto 180 - up do begin for ra1 := 25 downto 10 do PaintBox4.Canvas.LineTo(Round(mx1-ra1*cos(i*Pi/180)), Round(my1-ra1*sin(i*Pi/180))); end; try if IsInternetConnected = false then begin Label43.Caption := 'IP: 0.0.0.0'; Timer6.Enabled := true; Timer7.Enabled := false; Timer5.Enabled := false; end; except end; end; Ich vermute, dass es mit dem WMI-Auslesen zu tun hat (Internet Traffic). Wenn jemand dafür eine andere Möglichkeit kennt, oder sonst eine Idee hat, wie ich die Performance verbessern kann, wär ich ihm sehr dankbar. Gruß Flo |
Re: Code Teil hat viel zu viel CPU Auslastung
Zweimal genau die gleiche Query zu öffnen ist Quark:
Delphi-Quellcode:
vQuery.WQL.Text := 'select * from Win32_PerfFormattedData_Tcpip_NetworkInterface WHERE Name="Sinus 154 stick - Paketplaner-Miniport"';
vQuery.Open; down := round(vQuery.FieldValues['BytesReceivedPersec']/1024); (* weg damit vQuery.WQL.Text := 'select * from Win32_PerfFormattedData_Tcpip_NetworkInterface WHERE Name="Sinus 154 stick - Paketplaner-Miniport"'; vQuery.Open; *) up := round(vQuery.FieldValues['BytesSentPersec']/1024); |
Re: Code Teil hat viel zu viel CPU Auslastung
Musst du jedesmal die Connection und Query neu erzeugen? Behalte sie doch während der ganzen Programmlaufzeit erzeugt.
|
Re: Code Teil hat viel zu viel CPU Auslastung
alles klar. danke für die tipps. werd das mal umsetzen und sehen, was bei raus kommt
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz