SnTT: Performance Betrachtung bei Instr

von Bernd Hort,
assono GmbH, Standort Hamburg,

Wie ich feststellen musste, gibt es in LotusScript erhebliche Performanceunterschiede bei dem Befehl Instr, je nachdem ob man ihn case-sensitiv verwendet oder nicht. Mit erheblich meine ich so ungefähr 900 mal langsamer, wenn der Befehl Instr mit der Option "case-insensitive, pitch-insensitive" ausgeführt wird.

Bei relativ kurzen Texten fällt es nicht weiter auf. Wenn die Texte allerdings länger werden, macht es sicht deutlich bemerkbar. Für das Beispiel mit der ca. 900 langsameren Ausführung habe ich einen relativ langen "Lorem ipsum" Text (5539 Zeichen) zehn mal aneinandergehängt. Um die Unterschiede messen zu können, habe ich den Instr-Befehl jeweils 1000 mal durchlaufen lassen. Zum Messen habe ich eine Profiling-Routine verwendet, die Thomas Bahn geschrieben hat.

For i = 1 To 10
       text = text & CRLF & text
Next

For i = 1 To 1000
       Call StartProfiling("InstrTest", "case-sensitiv")
       pos = Instr(text, "Defacto")
       Call StopProfiling("InstrTest", "case-sensitiv")                
Next

For i = 1 To 1000
       Call StartProfiling("InstrTest", "case-insensitiv")
       pos = Instr(1, text, "Defacto",5)
       Call StopProfiling("InstrTest", "case-insensitiv")                        
Next

Call LogProfiles()

Das Ergebnis ist recht beeindruckend.

Option Aufrufe Ausführungszeit
insgesamt
Ausführungszeit
durchschnittlich
case-insensitiv 1000 459,640 0,45964
case-sensitiv 1000 0,063 0,00006

Weil ich aber sicherstellen musste,
dass ich unabhängig von der Groß-/Kleinschreibung alle Treffer finde und
trotzdem diesen Performanceeinbruch nicht in Kauf nehmen wollte, musste
ich mir etwas einfallen lassen. Wie so häufig wurde die Performancesteigerung
durch einen höheren Speicherbedarf erkauft. Der zu durchsuchende Text wurde
in eine neue Variable geschrieben und anschließend alles auf Kleinschreibung
geändert. Die Position des Suchwortes wurde dann in dem kleingeschriebenen
Text bestimmt.


For
i = 1 To 1000

       Call
StartProfiling("InstrTest", "case-sensitiv mit Lcase")

       textSmallLetters = Lcase(text)

       pos =
Instr(textSmallLetters, Lcase("Defacto"))

       Call
StopProfiling("InstrTest", "case-sensitiv mit Lcase")        
               
Next


Die Durchlaufzeit konnte dadurch stark
reduziert werden. Sie aber immer noch nicht annährend so schnell wie bei
der case-sensitiven Option. Aber für meine Anwendung hat es gereicht.

Fachbeitrag Tipp Entwicklung

Sie haben Fragen zu diesem Artikel? Kontaktieren Sie uns gerne: blog@assono.de

Sie wollen eine individuelle Lösung? Kontaktieren Sie uns

Weitere interessante Artikel

IBM Cognos Analytics 11.0.9 (R9)

IBM Cognos Analytics 11.0.9 (R9)

Erst Mitte November hatten wir über Neuerung in der Version 11.0.8 gebloggt. Knapp ein Monat später veröffentlicht IBM die Version 11.0.9 … Mehr

von
Filip Meyer
,

Sie haben Fragen? Wir sind für Sie da.

Wenn Sie mehr über unsere Angebote erfahren möchten, können Sie uns jederzeit kontaktieren. Sie können uns auf verschiedene Weisen für eine unverbindliche Erstberatung erreichen:

assono GmbH

Standort Kiel (Zentrale)
assono GmbH
Lise-Meitner-Straße 1–7
24223 Schwentinental

Standort Hamburg
assono GmbH
Bornkampsweg 58
22761 Hamburg

Telefonnummern:
Zentrale: +49 4307 900 407
Techn. Hotline: +49 4307 900 403
Vertrieb: +49 4307 900 402

E-Mail-Adressen:
kontakt@assono.de
bewerbung@assono.de