Ressourcengrenzen und Leistungsoptimierung für Office-Add-Ins
Qualitäts-Add-Ins müssen innerhalb bestimmter Anforderungen hinsichtlich CPU-Kernauslastung, Arbeitsspeicherauslastung, Zuverlässigkeit und für Outlook-Add-Ins die Antwortzeit für die Auswertung regulärer Ausdrücke ausgeführt werden. Diese Grenzwerte gewährleisten ausreichend Leistung für die Benutzer und tragen außerdem dazu bei, das Risikopotenzial von Denial-of-Service-Angriffen zu verringern. Stellen Sie sicher, dass Sie Ihr Office-Add-In in Ihrer Office-Zielanwendung testen, indem Sie eine Reihe möglicher Daten verwenden, und messen Sie die Leistung anhand der folgenden Laufzeitnutzungslimits.
Grenzwerte für die Ressourcennutzung für Add-Ins
Die folgenden Laufzeitressourcenlimits gelten für alle Add-Ins, die in Office-Clients unter Windows und Mac ausgeführt werden, jedoch nicht für mobile Apps oder in einem Browser.
CPU-Kernauslastung : Ein Einzelner CPU-Kernauslastungsschwellenwert von 90 %, der standardmäßig dreimal in 5-Sekunden-Intervallen beobachtet wird.
Wenn der Office-Client erkennt, dass die CPU-Kernauslastung eines Add-Ins über dem Schwellenwert liegt, wird eine Meldung mit der Frage angezeigt, ob der Benutzer die Ausführung des Add-Ins fortsetzen möchte. Wenn der Benutzer den Vorgang fortsetzen möchte, fragt der Office-Client den Benutzer während dieser Bearbeitungssitzung nicht erneut ab. Das Standardintervall für einen Office-Client zum Überprüfen der CPU-Kernauslastung beträgt alle 5 Sekunden. Administratoren können den Registrierungsschlüssel AlertInterval verwenden, um den Schwellenwert zu erhöhen, um die Anzeige dieser Warnmeldung zu reduzieren, wenn Benutzer CPU-intensive Add-Ins ausführen.
Arbeitsspeicherauslastung – Ein Grenzwert für die standardmäßige Arbeitsspeicherauslastung, der basierend auf dem verfügbaren physischen Arbeitsspeicher des Geräts dynamisch festgelegt wird.
Wenn ein Office-Client erkennt, dass die physische Speicherauslastung auf einem Gerät 80 % des verfügbaren Arbeitsspeichers überschreitet, beginnt der Client standardmäßig mit der Überwachung der Speicherauslastung des Add-Ins. Dies erfolgt auf Dokumentebene für Inhalts- und Aufgabenbereich-Add-Ins und auf Postfachebene für Outlook-Add-Ins. In einem Standardintervall von 5 Sekunden warnt der Client den Benutzer, wenn die physische Speicherauslastung für eine Gruppe von Add-Ins auf Dokument- oder Postfachebene 50 % überschreitet. Bei diesem Grenzwert für die Arbeitsspeicherauslastung wird physischer und nicht virtueller Speicher verwendet, um die Leistung auf Geräten mit eingeschränktem RAM wie Tablets sicherzustellen. Administratoren können diese dynamische Einstellung mit einem expliziten Grenzwert überschreiben, indem sie den Windows-Registrierungsschlüssel MemoryAlertThreshold als globale Einstellung verwenden. Sie können das Warnungsintervall auch mit dem AlertInterval-Schlüssel anpassen.
Absturztoleranz : Ein Standardlimit von vier Abstürze während der Sitzung des Dokuments.
Administratoren können den Schwellenwert für Abstürze mithilfe des Registrierungsschlüssels RestartManagerRetryLimit anpassen.
Anwendungsblockierung : Ein längerer Schwellenwert für nicht reagierende Anwendungen von 5 Sekunden.
Dies wirkt sich auf die Benutzerfreundlichkeit des Add-Ins und der Office-Anwendung aus. In diesem Fall startet die Office-Anwendung automatisch alle aktiven Add-Ins für ein Dokument oder Postfach (falls zutreffend) neu und warnt den Benutzer, welches Add-In nicht mehr reagiert. Add-Ins erreichen diesen Schwellenwert, wenn sie bei der Ausführung von Aufgaben mit langer Ausführungszeit nicht regelmäßig zur Verarbeitung führen. Es gibt Techniken, die weiter unten in diesem Artikel aufgeführt werden, um sicherzustellen, dass das Add-In die Office-Anwendung nicht blockiert. Administratoren können diesen Schwellenwert nicht überschreiben.
Aufgabenbereich- und Inhalts-Add-Ins
Wenn ein Inhalts- oder Aufgabenbereich-Add-In die vorhergehenden Schwellenwerte für die CPU-Kern- oder Arbeitsspeicherauslastung oder das Toleranzlimit für Abstürze überschreitet, zeigt die entsprechende Office-Anwendung eine Warnung für den Benutzer an. At this point, the user can do one of the following:
- Das Add-In neu starten.
- Weitere Warnungen hinsichtlich der Überschreitung dieses Grenzwerts unterdrücken. Im Idealfall sollte der Benutzer dann das Add-In aus dem Dokument löschen. Die weitere Verwendung des Add-Ins würde weitere Leistungs- und Stabilitätsprobleme riskieren.
Outlook-Add-Ins
Wenn ein Outlook-Add-In die obigen Schwellenwerte für die CPU-Kern- oder Arbeitsspeicherauslastung oder die Toleranzgrenze für Abstürze überschreitet, ist das Add-In nicht mehr verfügbar. Exchange Admin Center zeigt die status des Add-Ins an.
Hinweis
Obwohl nur Outlook unter Windows (klassisch) und unter Mac die Ressourcennutzung überwachen, ist dieses Add-In auch in Outlook im Web, auf mobilen Geräten und in outlook unter Windows nicht mehr verfügbar, wenn einer dieser Clients ein Outlook-Add-In nicht verfügbar macht.
Zusätzlich zu den CPU-Kern-, Arbeitsspeicher- und Zuverlässigkeitsregeln sollten Outlook-Add-Ins die folgenden Regeln für die Aktivierung beachten.
Antwortzeit für reguläre Ausdrücke – Für Outlook gilt ein standardmäßiger Grenzwert von 1.000 Millisekunden für die Überprüfung aller regulären Ausdrücke im Manifest einem Outlook-Add-In. Bei einer Überschreitung des Grenzwerts versucht Outlook die Überprüfung zu einem späteren Zeitpunkt.
Administratoren können diesen Standardschwellenwert von 1.000 Millisekunden mithilfe einer Gruppenrichtlinie oder anwendungsspezifischen Einstellung für den Schlüssel OutlookActivationAlertThreshold in der Windows-Registrierung anpassen.
Neuauswertung regulärer Ausdrücke : Ein Standardlimit von 3-mal, damit Outlook alle regulären Ausdrücke in einem Manifest neu auswertet. Wenn die Auswertung innerhalb des Zeitlimits 3-mal nicht ausgewertet werden kann, macht Outlook das Add-In nicht verfügbar.
Administratoren können diese Anzahl von Wiederholungsversuchen anpassen, indem sie eine Gruppenrichtlinie oder anwendungsspezifische Einstellung für den Schlüssel OutlookActivationManagerRetryLimit in der Windows-Registrierung verwenden.
Excel-Add-Ins
Excel-Add-Ins haben wichtige Grenzwerte für die Datenübertragung bei der Interaktion mit der Arbeitsmappe.
- Excel Im Web verfügt über ein Nutzlastgrößenlimit von 5MB für Anfragen und Antworten.
RichAPI.Error
wird ausgelöst, wenn dieser Grenzwert überschritten wird. - Ein Bereich ist für Lesevorgänge auf 5.000.000 Zellen beschränkt.
Wenn Sie davon ausgehen, dass die Benutzereingabe diese Grenzwerte überschreitet, überprüfen Sie die Daten, bevor Sie aufrufen context.sync()
. Teilen Sie den Vorgang nach Bedarf in kleinere Teile auf. Rufen Sie context.sync()
für jeden Untervorgang auf, um zu vermeiden, dass diese Vorgänge erneut in einem Batch zusammengefasst werden.
Diese Grenzwerte werden in der Regel durch große Bereiche überschritten. Ihr Add-In kann möglicherweise RangeAreas verwenden, um Zellen innerhalb eines größeren Bereichs strategisch zu aktualisieren. Weitere Informationen zum Arbeiten mit RangeAreas
finden Sie unter Arbeiten mit mehreren Bereichen gleichzeitig in Excel-Add-Ins. Weitere Informationen zum Optimieren der Nutzlastgröße in Excel finden Sie unter Bewährte Methoden zur Begrenzung der Nutzlastgröße.
Überprüfen von Ressourcennutzungsproblemen im Telemetrieprotokoll
Office stellt ein Telemetrieprotokoll bereit, in dem bestimmte Ereignisse (Laden, Öffnen, Schließen und Fehler) für Office-Lösungen aufgezeichnet werden, die auf dem lokalen Computer ausgeführt werden. Dies schließt Ressourcennutzungsprobleme in einem Office-Add-In ein. Wenn Sie das Telemetrieprotokoll eingerichtet haben, können Sie Excel verwenden, um das Telemetrieprotokoll am folgenden Standardspeicherort auf Ihrem lokalen Laufwerk zu öffnen.
%Users%\<Current user>\AppData\Local\Microsoft\Office\16.0\Telemetry
Für jedes Ereignis, das vom Telemetrieprotokoll für ein Add-In nachverfolgt wird, wird Folgendes angegeben: Datum/Uhrzeit des Auftretens, Ereignis-ID, Schweregrad, kurzer aussagekräftiger Titel für das Ereignis, Anzeigename und eindeutige ID des Add-Ins sowie die Anwendung, von der das Ereignis protokolliert wurde. Aktualisieren Sie das Telemetrieprotokoll, um die aktuellen nachverfolgten Ereignisse anzuzeigen. In der folgenden Tabelle sind einige Beispiele für Outlook-Add-Ins aufgeführt, die im Telemetrie-Protokoll nachverfolgt wurden.
Datum/Uhrzeit | Ereignis-ID | Severity | Position | File | ID | Anwendung |
---|---|---|---|---|---|---|
8.10.2022 17:57:10 PM | 7 | Nicht zutreffend | Das Add-In-Manifest wurde erfolgreich heruntergeladen. | Who's Who | 69cc567c-6737-4c49-88dd-123334943a22 | Outlook |
8.10.2022 17:57:01 PM | 7 | Nicht zutreffend | Das Add-In-Manifest wurde erfolgreich heruntergeladen. | 333bf46d-7dad-4f2b-8cf4-c19ddc78b723 | Outlook |
In der folgenden Tabelle sind die Ereignisse aufgeführt, die das Telemetrieprotokoll für Office-Add-Ins nachverfolgt.
Ereignis-ID | Position | Severity | Beschreibung |
---|---|---|---|
7 | Das Add-In-Manifest wurde erfolgreich heruntergeladen. | Nicht zutreffend | Das Manifest des Office-Add-Ins wurde erfolgreich von der Office-Anwendung geladen und gelesen. |
8 | Das Add-In-Manifest konnte nicht heruntergeladen werden. | Kritisch | Die Office-Anwendung konnte die Manifestdatei für das Office-Add-In nicht aus dem SharePoint-Katalog, unternehmenskatalog oder AppSource laden. |
9 | Der Markup-Code des Add-Ins konnte nicht analysiert werden. | Kritisch | Die Office-Anwendung hat das Office-Add-In-Manifest geladen, konnte aber das HTML-Markup der App nicht lesen. |
10 | Die CPU-Nutzung des Add-Ins ist zu hoch. | Kritisch | Die Office-Add-In hat über eine begrenzte Zeitspanne mehr als 90 % der CPU-Ressourcen beansprucht. |
15 | Das Add-In wurde aufgrund eines Timeouts bei der Zeichenfolgensuche deaktiviert. | Nicht zutreffend | Outlook-Add-Ins durchsuchen die Betreffzeile und die Nachricht einer E-Mail, um zu ermitteln, ob sie mithilfe eines regulären Ausdrucks angezeigt werden soll. Das Outlook-Add-In, die in der Spalte File angegeben ist, wurde von Outlook deaktiviert, weil es bei dem Versuch, einen regulären Ausdruck zuzuordnen, mehrfach zu einer Zeitüberschreitung gekommen ist. |
18 | Das Add-In wurde erfolgreich geschlossen. | Nicht zutreffend | Die Office-Anwendung konnte das Office-Add-In erfolgreich schließen. |
19 | Für das Add-In ist ein Laufzeitfehler aufgetreten, der lokal protokolliert wurde. | Kritisch | Das Office-Add-In hatte ein Problem, das dazu geführt hat, dass es fehlschlägt. Weitere Informationen finden Sie im Microsoft Office-Warnungsprotokoll mithilfe der Windows-Ereignisanzeige auf dem Computer, auf dem der Fehler aufgetreten ist. |
20 | Das Add-In konnte die Lizenzierung nicht überprüfen. | Kritisch | Die Lizenzierungsinformationen für das Office-Add-In konnten nicht überprüft werden und sind möglicherweise abgelaufen. Weitere Informationen finden Sie im Microsoft Office-Warnungsprotokoll mithilfe der Windows-Ereignisanzeige auf dem Computer, auf dem der Fehler aufgetreten ist. |
Weitere Informationen finden Sie unter Deploying Telemetry Dashboard und Problembehandlung für Office-Dateien und benutzerdefinierte Lösungen mit dem Telemetrieprotokoll.
Design- und Implementierungsverfahren
Während die Ressourcengrenzwerte für CPU- und Arbeitsspeicherauslastung, Absturztoleranz und Reaktionsfähigkeit der Benutzeroberfläche nur für Office-Add-Ins gelten, die nur auf Office-Desktopclients ausgeführt werden, sollte die Optimierung Priorität haben, wenn Sie möchten, dass Ihr Add-In auf allen unterstützenden Clients und Geräten zufriedenstellend ausgeführt wird. Die Optimierung ist besonders wichtig, wenn Ihr Add-In zeitintensive Vorgänge ausführt oder große Datasets verarbeitet. In der folgenden Liste werden einige Techniken vorgeschlagen, um CPU-intensive oder datenintensive Vorgänge in kleinere Blöcke aufzuteilen, damit Ihr Add-In einen übermäßigen Ressourcenverbrauch vermeidet und die Office-Anwendung reaktionsfähig bleibt.
Wenn Ihr Add-In eine große Datenmenge aus einem ungebundenen Dataset lesen muss, können Sie beim Lesen der Daten aus einer Tabelle Paging anwenden oder die Größe der Daten in jedem kürzeren Lesevorgang verringern, anstatt zu versuchen, den Lesevorgang in einem einzigen Vorgang abzuschließen. Dazu können Sie die setTimeout-Methode des globalen Objekts verwenden, um die Dauer der Eingabe und Ausgabe zu begrenzen. It also handles the data in defined chunks instead of randomly unbounded data. Eine weitere Möglichkeit besteht darin, asynchron zu verwenden, um Ihre Zusage zu verarbeiten.
Wenn Ihr Add-In einen CPU-intensiven Algorithmus verwendet, um eine große Datenmenge zu verarbeiten, können Sie Web-Worker verwenden, um die zeitintensive Aufgabe im Hintergrund auszuführen, während Sie ein separates Skript im Vordergrund ausführen, z. B. das Anzeigen des Fortschritts auf der Benutzeroberfläche. Web-Worker blockieren keine Benutzerinteraktionen und sorgen dafür, dass die HTML-Seite reaktionsfähig bleibt. Ein Beispiel für Web-Worker finden Sie unter Die Grundlagen von Web Workern.
Wenn Ihr Add-In einen CPU-intensiven Algorithmus verwendet, Aber Sie die Dateneingabe oder -ausgabe in kleinere Gruppen aufteilen können, sollten Sie erwägen, einen Webdienst zu erstellen, die Daten an den Webdienst zu übergeben, um die CPU auszuschalten, und warten Sie auf einen asynchronen Rückruf.
Testen Sie Ihre App immer bei dem höchsten zu erwartenden Datenaufkommen, und schränken Sie Ihr Add-In so ein, dass Verarbeitungen nur bis zu diesem Grenzwert möglich sind.
Leistungsverbesserungen mit den anwendungsspezifischen APIs
Die Leistungstipps unter Verwenden des anwendungsspezifischen API-Modells bieten Anleitungen bei der Verwendung der anwendungsspezifischen APIs für Excel, OneNote, Visio und Word. Zusammenfassend sollten Sie Folgendes ausführen:
- Laden Sie nur die erforderlichen Eigenschaften.
-
Minimieren Sie die Anzahl der sync()-Aufrufe. Weitere Informationen zum Verwalten
sync
von Aufrufen in Ihrem Code finden Sie unter Vermeiden der Verwendung der context.sync-Methode in Schleifen. - Minimieren Sie die Anzahl der erstellten Proxyobjekte. Sie können die Nachverfolgung von Proxyobjekten auch aufheben, wie im nächsten Abschnitt beschrieben.
Nicht benötigte Proxyobjekte nicht nachverfolgen
Proxyobjekte bleiben im Arbeitsspeicher erhalten, bis RequestContext.sync()
aufgerufen wird. Große Batchvorgänge generieren möglicherweise viele Proxyobjekte, die nur einmal von dem Add-In benötigt werden und aus dem Arbeitsspeicher freigegeben werden können, bevor der Batchvorgang ausgeführt wird.
Die untrack()
-Methode gibt das Objekt aus dem Arbeitsspeicher frei. Diese Methode wird für viele anwendungsspezifische API-Proxyobjekte implementiert. Das Aufrufen untrack()
, nachdem das Add-In mit dem -Objekt abgeschlossen wurde, sollte einen spürbaren Leistungsvorteil ergeben, wenn eine große Anzahl von Proxyobjekten verwendet wird.
Hinweis
Range.untrack()
ist eine Verknüpfung für ClientRequestContext.trackedObjects.remove(thisRange). Die Nachverfolgung eines Proxyobjekts kann aufgehoben werden, indem es aus der Liste der nachverfolgten Objekte im Kontext entfernt wird.
Im folgenden Excel-Codebeispiel wird ein ausgewählter Bereich mit Daten gefüllt, jeweils eine Zelle nach der anderen. Nachdem der Wert der Zelle hinzugefügt wurde, wird die Nachverfolgung für den Bereich aufgehoben, der diese Zelle darstellt. Führen Sie diesen Code mit einem ausgewählten Bereich von 10.000 bis 20.000 Zellen zuerst mit der Zeile cell.untrack()
und dann ohne diese Zeile aus. Sie sollten feststellen, dass der Code mit der Zeile cell.untrack()
schneller als ohne die Zeile ausgeführt wird. Möglicherweise stellen Sie auch eine schnellere Reaktionszeit danach fest, da die Bereinigung weniger Zeit in Anspruch nimmt.
Excel.run(async (context) => {
const largeRange = context.workbook.getSelectedRange();
largeRange.load(["rowCount", "columnCount"]);
await context.sync();
for (let i = 0; i < largeRange.rowCount; i++) {
for (let j = 0; j < largeRange.columnCount; j++) {
let cell = largeRange.getCell(i, j);
cell.values = [[i *j]];
// Call untrack() to release the range from memory.
cell.untrack();
}
}
await context.sync();
});
Beachten Sie, dass das Aufheben der Nachverfolgung von Objekten nur dann wichtig wird, wenn Sie es mit Tausenden von objekten zu tun haben. Die meisten Add-Ins müssen keine Proxyobjektnachverfolgung verwalten.
Siehe auch
Office Add-ins