Anzeige
Archiv - Navigation
1052to1056
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Do loop Schleife mit hoher CPU Last

Do loop Schleife mit hoher CPU Last
21.02.2009 17:37:29
Steffen44

Hallo,
ich habe ein kleines Programm wo ich Daten von der RS232 Schnittstelle in Excel einlese.
Das einlesen geschieht per Do loop Schleife wo die Daten direkt in die Zellen von Excel geschrieben werden.
Was mir permanent negativ auffällt ist das egal welche Schleifenart man verwendet das immer mindestens 50% Cpu Last entstehen.
Ich habe mit Time + TimeSerial ein bisschen probiert das ganz zu optimieren:

Sub starten()
Application.ScreenUpdating = False
Static lngCalc As Long
t = True
zeit = Time + TimeSerial(0, 0, 0.6)
DoEvents
Application.OnTime zeit, "generate_meldung"
Application.ScreenUpdating = True
End Sub



Sub generate_meldung()
'call meinscript
If t = True Then starten
Application.ScreenUpdating = True
End Sub


Dabei konnte ich bei TimeSerial als mindeste Zahl nur 0,6 Sekunden einsetzen. Wenn das Script läuft verursacht es ein flackern aller Zellen und mancher Menüleisten. Das Flackern habe ich eigentlich bei fast jedem Scriptaufruf festgestellt, schein wohl ein Hausgemachtes MicroSoft Problem zu sein.
Mit Time + TimeSerial hat man zumindest den Vorteil das die CPU last bei nichteinmal 1% liegt aber den Nachteil das die Zellen bei jedem Aktualisierungsintervall flackern :-(
Das heißt ich suche eine Möglichkeit eine Schleife mit minimaler CPU Last ausführen zu können oder eine Methode die nicht die Zellen und das halbe Excel flackern läßt.
Ich bin gespannt und hoffe ihr habt da ein paar Tips parat.
Danke und Gruß
Steffen

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Do loop Schleife mit hoher CPU Last
21.02.2009 18:17:02
Luschi
Hallo Steffen,
suche mal im Internet nach getMoreSpeed. Hier werden 3 Excelkomponenten ein- bzw. ausgeschalten:
- Bildschirmaktualisierung
- automatische Berechnung
- interaktive Ereignisausführung
Gruß von Luschi
aus klein-Paris
AW: Do loop Schleife mit hoher CPU Last
21.02.2009 18:45:28
Steffen44
Hallo Luschi,
habe den Code gefunden den du meinst und promt probiert :

Sub getMoreSpeed(bDoIt As Boolean)
Application.ScreenUpdating = Not (bDoIt)
Application.EnableEvents = Not (bDoIt)
Application.Calculation = IIf(bDoIt, xlCalculationManual, xlCalculationAutomatic)
End Sub



Sub test()
getMoreSpeed True
Do
Loop
getMoreSpeed False
End Sub


Wenn ich S'ub test starte dann ist darin einfach nur eine do loop anweisung wohl gesagt das diese leer ist und keinerlei Sachen bearbeitet, dabei aber trotzdem konstante 50% CPU Last verusacht.
Die S'ub getMoreSpeed scheint da nicht wirklich zu helfen oder mache ich da was falsch ?
Gruß
Steffen

Anzeige
AW: Wo ist das Makro?
21.02.2009 19:02:26
Erich
Hi Steffen,
du machst es richtig, der PC macht es richtig....
Du lässt ihn unendlich oft eine leere Schleife abarbeiten. Die 50% Auslastung zeigen mir,
dass dein PC wohl 2 Prozessoren hat. Davon ist einer zu 100% ausgelastet mit der Schleife.
Nur:
In "test" kann "getMoreSpeed" keinerlei Wirkung haben, denn innerhalb deiner Schleife
- ändert sich der Bilschirminhalt ohnehin nicht,
- treten keine Ereignisse auf,
- werden keine Zeilen neu berechnet.
Was also soll getMoreSpeed hier bewirken?
Zeig mal das Makro, mit dem das Einlesen geschieht (per Do-Loop Schleife,
wo die Daten direkt in die Zellen von Excel geschrieben werden)
Da dürfte der Hund begraben liegen. Es ist langsam, jede Zelle einzeln zu beschreiben.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Wo ist das Makro?
21.02.2009 19:46:49
Steffen44
Hallo Erich,
ich habe das riesige Makro extra nicht gepostet da es so lang ist das man ca. 35 mal Bild ab drücken muß bis man am Ende angelangt ist ^^ .
Ich muß vieleicht ersteinmal verstehen warum eine leere Schleife 100% Prozessorauslastung verusacht.
Ich bin nach wie vor der Meinung das wenn ich eine leere Schleife habe der Prozessor auch keine Arbeiten zu verrichten hat und deswegen auch keine 100%ige Auslastung haben kann.
Wenn ich meinen Atmel Mikrocontroller programmiere wird dieser auch nicht langsamer wenn ich eine leere Schleife anlege.
do
absolut nix = 100% ? ... versteh ich nicht
loop
Gruß
Steffen
Anzeige
Do nix Loop is nix nix...
21.02.2009 20:16:38
Renee
Hi Steffen,
VBA ist eine interpretierte Sprache. Also passiert bei einem Leeren Do Loop

Mache
Gehe zu mache


und das sind immerhin 2 Anweisungen die 100% CPU brauchen!
GreetZ Renée

AW: Do nix Loop is nix nix...
21.02.2009 20:38:04
Steffen44
naja dazu kann ich nur noch sagen :
do verbrenne Fett
loop until super_dünn
und bei neueren Excel Version als 2000 ?
21.02.2009 20:52:14
Steffen44
da ich nur das gute alte excel 2000 zur Verfügung habe gehe ich sicher richtig in der Annahme das es in jeder Excel Version so ist oder ?
Es muß doch möglich sein eine Schleife CPU und damit Stromsparend zu programmieren.
ja das ist mit allen Versionen so,
21.02.2009 21:01:13
Renee
Steffen,
Aber bitte erklär mal:
Zitat: Es muß doch möglich sein eine Schleife CPU und damit Stromsparend zu programmieren.
Ist das Green Programming oder Green Computing oder was ?
Level VBA gut ? Und von 4 Stunden konntest du noch nicht mal eine einfache Schleife proggen !
GreetZ Renée
Anzeige
AW: ja das ist mit allen Versionen so,
22.02.2009 12:01:19
Steffen44
was hast du gegen green Computing oder Programming wie du es nennst ? Immerhin gibt es schon mehr als genug Co2 und die Stromrechnung kann man auch minimieren. Ich bin nunmal Umweltbewusst was jeder andere auch sein sollte wenn nicht in 50 Jahren die Küsten 4 Meter und Wasser stehen sollen.
Was hast du gegen "Level VBA gut" ? Ich habe nicht viel Ahnung von Schleifen das mag sein dafür habe ich meiner Meinung ein recht gutes Grundverständniss für VBA und kann den meisten Code den ich sehe auch anpassen so das es seine Funktion erfüllt. Ich habe kein Studium für VBA aber es hat für eine komplexe Pumpenprüfstandsoftware mit USB Anbindung und Live View der Pumpendaten/Kennlinie gereicht auch wenn darin nur eine einzige do loop Schleife vorkommt ist alles in der Schleife untergebracht was man braucht.
Über die Definition der Level kann man sich streiten solange es keine genaueren Spezifikationen der Level gibt denke ich liege ich leicht über dem Durchschnitt und aufgerundet bei "gut" ;-)
Gruß
Steffen
Anzeige
AW: Green Computing
22.02.2009 12:31:43
Erich
Hi Steffen,

Sub StromSparCode()        ' Es muß doch möglich sein, eine Schleife CPU-
Do                      ' und damit stromsparend zu programmieren.
Exit Do
Loop
End Sub

Dieser Code
- verbraucht fast keinen Strom,
- belastet die CPU kaum messbar,
- läuft ungeheuer schnell,
- ist sehr übersichtlich,
- zerstört keine Daten,
hat also eigentlich nur Vorteile, oder?
Grüße von Erich aus Kamp-Lintfort - und noch einen schönen Restsonntag!

AW: Green Computing
22.02.2009 12:42:22
Ramses
Hallo
"...Immerhin gibt es schon mehr als genug Co2 und die Stromrechnung kann man auch minimieren..."
Zum CO2 eliminieren am ehesten solange wie möglich die alten PC brauchen.
Zum normalen arbeiten mit einer solchen Anforderung reicht ein alter PC und ein CoreDuo ProZessor mit einer Grafikkarte die eigene Lüfter, oder Doppellüfter benötigt, ist auch nicht nötig :-)
Und ob deine VBA Programmierung zur Reduktion der Stromkosten bzw. CO2 Reduktion beiträgt lasse ich mal dahingestellt in Zeiten von E2007 und Windows Vista :-) Die verbrauchen deutlich mehr Strom als deine Schleife :-)
Gruss Rainer
Anzeige
Wenn der Meeresspiegel 4 Meter
22.02.2009 12:41:05
Renee
steigt, Steffen
dann hast du automatisch Green Computing, weil dann die Dinger einfach abstellen, da die wenigsten wasserdicht sind. Und deine Pumpen müssen dann auch nicht mehr kontrolliert werden ;-) Bei meinem (nicht eigenen) Compi gibts ein Ein/Aus Knopf, wobei Aus am meisten CO2 spart!
Zu einem Grundverständnis von VBA gehört sehr wohl, das es eine interpretierte Sprache ist.
Wenn Du zeitgesteuerte Schleifen bauen willst, dann ist dein Ansatz mit .OnTime schon richtig. Nur sollte dann die aufgerufene Routine nicht in eine Endlos-Schlaufe laufen! In VBA kannst du keinen Doktor machen, sondern höchstens SchamanIn werden!
GreetZ Renée
Anzeige
Danke an alle
22.02.2009 14:33:28
Steffen44
Renée was bitte soll die Argumentation das es eine interpretierte Sprache ist ?
Selbst wenn der Quellcode nicht durch einen Compiler geschickt wird ist das noch lange kein Grund warum es nicht effektivere Schleifen geben kann. Du hast doch auch kein Puls von 200 nur weil dein Herz die Endlosanweisung hat zu schlagen.
Da das hier zuweit vom eigentlichen Thema abschweift und die Frage beantwortet ist, antwortet hierauf bitte nicht mehr. Ich danke ich euch für eure unterhaltsamen und informativen Beiträge und wünsche ein schönes Wochenende.
Hab was gefunden für dich...
22.02.2009 18:24:34
Renee
Steffen,
Vielleicht kannst Du damit CO2 sparen ?:
Throttle your PC
GreetZ Renée
Anzeige
AW: Hab was gefunden für dich...
22.02.2009 21:02:25
Steffen44
Danke für den Tip Renée das Tool werde ich morgen gleich testen.
Gruß
Steffen

218 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige