Kennen Sie schon unseren Podcast? Thomas Bahn diskutiert mit Gästen aus Wirtschaft und Wissenschaft über Künstliche Intelligenz und Chatbots. Jetzt reinhören

de · en

SnTT: Performance Betrachtung bei Instr

von Bernd,
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 Entwicklung

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

Sie haben Interesse an diesem Thema?

Gerne bieten wir Ihnen eine individuelle Beratung oder einen Workshop an.

Kontaktieren Sie uns

Weitere interessante Artikel

Sie haben Fragen?

Wenn Sie mehr über unsere Angebote erfahren möchten, können Sie uns jederzeit kontaktieren. Gerne erstellen wir eine individuelle Demo für Sie.

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
Vertrieb: +49 4307 900 411

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