0

Ich implementierte eine VS2013-Erweiterung in einer Form von VSPackage, die auch einen Klassifizierer für eine bestimmte Dateierweiterung exportiert. Alles funktioniert gut, und das einzige, was mich stört, ist, dass GetClassifier() zweimal in meiner Implementierung von IClassifierProvider aufgerufen wird. Dies führt zur Erzeugung von zwei Klassifikatoren, die beide die gleichen Änderungen verarbeiten. Die Implementierung von IClassifierProvider ist so einfach wie unten gezeigt.GetClassifier() von IClassifierProvider zweimal aufgerufen?

Ich habe versucht, mein Paket zu minimieren, indem Sie alles entfernen, was nicht mit der Klassifizierung zusammenhängt, ohne Erfolg. Würde mich wirklich über einen Hinweis zu diesem Thema freuen.

UPDATE: Ich habe mich geirrt, dass Textpuffer in GetClassifier-Aufrufen unterschiedlich sind. Dieser Beitrag wurde entsprechend aktualisiert.

Antwort

1

Eine Sache, die Sie beschreiben sollten, ist, welche Geste zu mehreren Aufrufen mit unterschiedlichen Puffern führte. Sie werden auf jeden Fall einen Aufruf für GetClassifier für jede geöffnete Datei erhalten, und Sie könnten möglicherweise mehrere Aufrufe für den gleichen Textpuffer erhalten. Für den gleichen Textpuffer besteht das allgemeine Muster darin, dass eine andere Komponente nach Dateiänderungen sucht, diese einmal verarbeitet und dann die Änderungen über alle Klassifizierer meldet.

Es gibt auch "ausgefallene" Fälle, in denen Textpuffer den Inhalt anderer Textpuffer enthalten können, die für verschiedene Funktionen verwendet werden. Das könnte auch erklären, was du siehst.

+0

Ich habe mich geirrt, dass Puffer anders sind, habe es nochmal überprüft. Ich kann dieses Problem jetzt umgehen, indem ich den Cache von Klassifikatoren gegen Puffer aufbewahre. – edwabr123

+1

Kühl. Ihr Klassifikator kann IDisposable implementieren, um zu wissen, wann Ihre Klassifikatoren nicht mehr benötigt werden, wenn Sie diese Fähigkeit benötigen. –