AW: Unterschiedliche Rechenleistung
27.11.2018 10:16:17
yogi
Hallöchen
zuerst mal Dank für die Hinweise.
Dass Rechner mit höherer Taktfrequenz und schnellerem RAM schneller sind, ist mir schon klar. Doch mit 3mal höherer Taktfrequenz erwarte ich keinen Faktor 120 Beschleunigung. Bei allen Rechnern beträgt die CPU-Belastung durch Excel während dem Rechnen ca 17%, bei einer gesamtbelastung der CPU von ca. 19%.
Der Code sieht so aus:
Sub set_trace(sub_is As String)
Const indents = " "
Dim entry_nr As Long
Dim aktion As String
Dim check_level As Long
Dim name_agenda_daten As String
If aktuelle_aktion > 20 Then
aktion = "unbekannt"
Else ' aktuelle_aktion > 20
aktion = akt(aktuelle_aktion)
End If ' aktuelle_aktion > 20
name_agenda_daten = ThisWorkbook.Worksheets("Agenda_Program").Range("name_agenda_daten")
' check level püfen
If IsNumeric(Left(sub_is, 1)) Then
check_level = Val(sub_is)
With Workbooks(name_agenda_daten).Worksheets("Trace")
If .Range("rg_check_level") >= check_level Then
.Unprotect (blatt_pw)
' Einrücken setzen
If InStr(1, sub_is, " - start", vbTextCompare) > 0 Then
.Range("rg_trace_indent") = .Range("rg_trace_indent") & " "
End If ' InStr(1, sub_is, " - start", vbTextCompare) > 0
' Eintrag retten
entry_nr = .Range("rg_trace_nr") + 1
.Cells(entry_nr, 2) = .Range("rg_trace_indent") & sub_is & " - " & aktuelle_aktion & " : _
" & Timer 'Format(Now(), "mm:ss.0") '
.Range("rg_last_trace") = .Cells(entry_nr, 2)
' Einrücken setzen
If InStr(1, sub_is, "exit", vbTextCompare) > 0 Then
If Len(.Range("rg_trace_indent")) > 0 Then
.Range("rg_trace_indent") = Left(.Range("rg_trace_indent"), Len(.Range(" _
rg_trace_indent")) - 4)
End If ' Len(.Range("rg_trace_indent")) > 0
End If ' InStr(1, sub_is, "exit", vbTextCompare) > 0
.Range("rg_trace_nr") = entry_nr
End If ' .Range("rg_check_level") >= check_level
.Protect (blatt_pw)
End With ' Workbooks(name_agenda_daten).Worksheets("Trace")
End If ' IsNumeric(Left(sub_is, 1))
End Sub
Die zugehörige Testroutine sieht so aus:
Sub test_trace()
Dim time_start As Double
Dim time_stop As Double
Dim time_is As Double
Dim loop_count As Long
Dim answ As Long
Dim total_time As Double
Application.ScreenUpdating = False
time_start = Timer
For loop_count = 1 To 100
Call set_trace("3, standard_ziel_liste - start " & "target_name")
Call set_trace("3, standard_ziel_liste - exit " & "target_name")
Range("rg_trace_nr") = 1
Next
time_stop = Timer
Application.ScreenUpdating = True
answ = MsgBox("Zeit: " & time_stop - time_start, vbOKOnly)
End Sub
Da verschiedene Excelversionen im Spiel sind, frage ich mich, ob die da ihren Teil beitragen. VBA muss ja interpretiert werden und wenn da unterschiedliche Interpreter vorhanden sind, könnte das ein Grund sein. Leider bin ich da kein Experte.