This project has moved. For the latest updates, please go here.

In der folgenden Übersicht sehen sie das Ergebniss von 3 Vergleichstest bzgl. der Performance verschiedener Zugriffswege in. NET auf MS-Office. Alle Tests wurden auf einer Windows7 32-Bit Workstation(2.66GHZ. 3,25GB RAM) mit MS Excel 2010 durchgeführt. Sie finden den Quellcode zu allen Tests online oder im Ordner PerformanceTests.

Test1: Durchlaufen von 5.000 Zellen und beschreiben mit einem Testwert.

Test2
: Durchlaufen von 10.000 Zellen, beschreiben mit einem Testwert. Änderung der Schriftart, Änderung des Zellenformats und Aufruf der BorderArround Methode,

Test3
: Durchlaufen von 15.000 Zellen, beschreiben mit einem Testwert. Änderung der Schriftart, Änderung des Zellenformats, Änderung der WrapText Eigenschaft und hinzufügen eines Kommentars.

Alle Tests wurden 10x ausgeführt und der gemittelte Wert in der folgenden Tabelle notiert.

  Test1 Test2 Test3
MS Interop Assemblies 00:00:02.8820154 00:00:25.9789228 00:01:28.4552610
VisualBasic LateBinding 00:00:02.9468967 00:00:26.7264004 00:01:29.0091273
Dynamics in C#  00:00:02.6801315 00:00:45.2283897 00:02:11.2374746
NetOffice Release 1.2 00:00:02.8579749 00:00:26.3763757 00:01:29.0284321


Anmerkungen:
Wie Sie erkennen können liegen alle Testergebnisse sehr nah zusammen mit Ausnahme der Dynamics in Test 2 und Test 3. Wie sind diese Werte zu erklären?

In meiner managed Umgebung(.NET) ist der Zugriff via Latebinding langsamer als EarlyBinding, jedoch fällt dieser Unterschied nicht so segnifikant aus wie in einer unmanaged Umgebung. NetOffice und der Latebinding Mechanismus in Visual Basic gleichen diese geringe Differenz durch intelligente Caching Mechanismen wieder aus so das Typen-Information für COM Proxies zu keinem Zeitpunkt mehrmals abgerufen werden müssen. Dieser Caching Mechansimus funktioniert Typen-basiert und bedeutet das Typen-Information für ein Range Objekt in Excel nur bei der ersten Verwendung eines Range Objektes abgerufen werden und diese Information danach auch für andere Range Objekte wiederverwendet wird.

Bei den C# Dynamics funktioniert diese Caching Mechanismus Instanz-basiert, dies bedeutet wenn Sie ein dynamic in einem lokalen Scope, z.B. einer ForEach Schleife, verwenden und dieser Scope abgebaut wird(am Ende jedes einzelnen Durchlaufs) die dynamic Variable mit samt ihren Typen-Information verworfen wird. Da in Test 2 und Test 3 lokale dynamic Variablen in einer ForEach Schleife deklariert und verwendet, und diese nach jedem neuerlichen Schleifendurchlauf verworfen werden, kommt es hier zu einem deutlichen Performance-Einbruch da die Typen-Informationen in jedem Durchlauf der Schleife erneut abgerufen werden müssen.

Zusatzbemerkung: Bei zur Entwicklungszeit unbekannten Typen, z.B. Variants, müssen in jedem Fall zusätzliche Informationen zur Laufzeit ermittelt werden um diese Typen zu analysieren, dieser Vorgang wird in NetOffice ebenfalls durch einen Caching Mechanismus unterstützt, kann jedoch die Performance geringfügig beinflussen.

Performance Tests Quellcode online

Test 1  
  Dynamics in C#
  VisualBasic LateBinding
  MS Interop Assemblies
  NetOffice
Test 2  
  Dynamics in C#
  VisualBasic LateBinding
  MS Interop Assemblies
  NetOffice
Test 3  
  Dynamics in C#
  VisualBasic LateBinding
  MS Interop Assemblies
  NetOffice

Last edited May 7, 2012 at 12:06 PM by SebastianDotNet, version 21

Comments

No comments yet.