Word-Addins vertragen sich nicht - unliebsame Wechselwirkung

27/09/2007 - 21:07 von Bernd Schend | Report spam
Hallo zusammen,

das folgende Problem habe ich bereits in der COM-Addin-Newsgroup
gepostet, aber leider keine Antwort erhalten:

Ein Kunde von mir hat neben meinem COM-Addin noch weitere installiert.
Die anderen Addins führten dazu, dass mein Addin langsamer wurde.
Zum Beispiel: Wenn es ein neues Dokument anlegt und aufbereitet,
wird eine Vielzahl von DocumentChange-Events gefeuert. Darauf scheinen
auch die anderen Addins zu regieren. Das Anlegen des Dokuments dauert
daher lànger und die Word-Menü-/Symbolleiste flackert nervös vor sich
hin.

Kürzlich wurde noch ein weiteres Addin installiert. Seitdem làuft mein
Addin dann und wann auf eine Ausnahme.

Gibt es eine Möglichkeit, mein Addin abzuschotten, sodass es keine
Wechselwirkung mit anderen Addins verursacht?
Ich habe kürzlich etwas über SHIM gelesen. Wàre das eine Möglichkeit?

Vielen Dank für Eure Antworten

Viele Grüße
Bernd
 

Lesen sie die antworten

#1 Harald M. Genauck
28/09/2007 - 01:41 | Warnen spam
Hallo Bernd,

das folgende Problem habe ich bereits in der COM-Addin-Newsgroup
gepostet, aber leider keine Antwort erhalten:

Ein Kunde von mir hat neben meinem COM-Addin noch weitere
installiert.
Die anderen Addins führten dazu, dass mein Addin langsamer wurde.
Zum Beispiel: Wenn es ein neues Dokument anlegt und aufbereitet,
wird eine Vielzahl von DocumentChange-Events gefeuert. Darauf
scheinen
auch die anderen Addins zu regieren. Das Anlegen des Dokuments dauert
daher lànger und die Word-Menü-/Symbolleiste flackert nervös vor sich
hin.

Kürzlich wurde noch ein weiteres Addin installiert. Seitdem làuft
mein
Addin dann und wann auf eine Ausnahme.

Gibt es eine Möglichkeit, mein Addin abzuschotten, sodass es keine
Wechselwirkung mit anderen Addins verursacht?
Ich habe kürzlich etwas über SHIM gelesen. Wàre das eine Möglichkeit?



Nun ja... die anderen Add-Ins deaktivieren oder gar deinstallieren?
;-)

Schließlich wissen ja die Add-Ins nichts voneinander. Und wenn ein
Add-In irgendein Event abonniert hat, dann sollte das eigentlich seinen
Sinn haben, nàmlich den, dass es im Falle eines erkannten vorgesehenen
Zustandes genau die Arbeit verrichten kann, derentwegen es ja
offensichtlich vom Anwender installiert worden ist. Die Verarbeitung
von Events, die hàufig gefeuert werden, dauert halt ihre Zeit. Und wenn
auch noch mehrere Add-Ins nacheinander im Spiel Sinn, dauert es eben
noch lànger, das liegt in der Natur der Sache.

Und wenn Du Dir vorstellst, dass den gleichen Wunsch nach Bevorzugung
oder gar Exklusivitàt ihres Add-Ins auch andere Entwickler haben
könnten, könnte das ein recht lustiges Jeder-gegen-Jeden-Spiel
werden...

Was Du von Deiner Seite aus zur Beschleunigung beitragen könntest: Die
Belastung bei der Verarbeitung eines Events so gering wie möglich zu
halten - also so schnell und so effizient wie möglich zu ermitteln, ob
Dein Add-In beim Eintreffen eines Events aktiv werden soll. Und wenn
das der Fall ist, diese Aktivitàt dann auch so effizient wie möglich
ausführen. Besser wàre es natürlich zu überlegen, ob Du so ein wir von
Dir erwàhntes, recht hàufig gefeurtes Event überhaupt benötigst. Wenn
Du es erst spàter, also noch nicht beim Anlegen eines Dokuments
benötigst, dann könnte es hilfreich sein, es erst nach Abschluss des
Dokumentanlegens mit der Handlerprozedur zu verbinden. Oder aber das
fertig angelegte Dokument darauf hin zuprüfenb, ob Dein Add-In
irgendetwas zu tun hat.

Bezüglich der Ausnahmen làsst sich so gar nichts sagen, da Du keine
weiteren Informationen zu diesen Ausnahmen gibst. Allgemein würde ich
zunàchst mal darauf tippen, dass Du in Deinem Code von Annahmen
ausgehst, die denn im konkreten Fall manchmal eben doch nicht
zutreffend sind. Abhelfen da vielleicht könnte deutlich defensiver
Code. Aber, wie gesagt - ohne weitere Info làsst sich da nicht viel
sagen.


Viele Grüße

Harald M. Genauck

ABOUT Visual Basic http://www.aboutvb.de (Herausgeber)
"visual studio one" - http://www.visualstudio1.de (Chefredakteur)

Ähnliche fragen