PRB: Erstellen von STA-Komponenten in der Konstruktor in ASP.NET ASPCOMPAT Mode Negatively auf die Leistung

Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.

Den englischen Originalartikel können Sie über folgenden Link abrufen: 308095
Dieser Artikel wurde archiviert. Er wird im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.
Problembeschreibung
Wenn Sie von einer ASP.NET-Seite in ASPCOMPAT Mode Apartmentthread-Komponenten aufrufen, stellen Sie möglicherweise erheblichen Leistungsabfall fest.
Ursache
Wenn Sie ASPCOMPAT-Modus verwenden (d. h. Wenn Sie eine Seite mit den verwenden < % @ ASPCOMPAT = "true" %>-Direktive), führt ASP.NET diese Seiten auf ein STA-Threadpool. Allerdings COM-Komponenten, die zur Konstruktionszeit erstellt werden vom Typ int ist erstellt werden, bevor die Anforderung an den Threadpool Singlethread-Apartment (STA) geplant ist und es werden daher von einem Multithread-Apartment (MTA)-Thread erstellt. In diesem Szenario kommt es zu erheblichen Leistungseinbußen.

Die meisten erheblich führt im gleichen Thread (Host STA) alle Instanzen von Apartmentthread-Komponenten, die vom MTA-Threads erstellt werden. Dies bedeutet, dass Obwohl alle Benutzer einen Verweis auf eine eigene Instanz der COM-Komponente verfügen, alle Aufrufe in diese Komponenten auf diesem einen Thread serialisiert werden (nur ein Aufruf führt zu einem Zeitpunkt aus).

Darüber hinaus ist eine kleinere Leistungseinbruch jedes Mal auf die Komponente aus Ereignisse des Page -aufgrund eines Schalters Thread aufgerufen wird. Dies ist da Ereignisse des Page auf einem Thread aus dem Pool STA ausgeführt werden, aber die COM-Komponente noch auf Host STA ausgeführt (da die COM-Komponente von einem MTA-Client erstellt wurde). Dieser Thread-Schalter führt auch zu anderen Fehlern, wenn Sie Identitätswechsel verwenden. Weitere Informationen finden Sie unter im Abschnitt "Informationsquellen" dieses Artikels.
Lösung
Bei Verwendung von ASPCOMPAT-Modus mit STA-Komponenten nur erstellen Sie COM-Komponenten von einer Methode oder eines der Page -Ereignisse (z. B. Page_Load , Page_Init und usw.), und erstellen Sie diese COM-Komponenten nicht zur Konstruktionszeit.

Vermeiden Sie z. B. einer Memberdeklaration ähnlich dem folgenden, die die Komponente zur Konstruktionszeit erstellt:

Visual Basic .NET
<%@ Page Language="VB" ASPCOMPAT="TRUE" %><script runat="server">Dim comObj As MyComObject = New MyComObject()Public Sub Page_Load()   comObj.DoSomething()End Sub</script>				
Visual c# .NET
<%@ Page Language="C#" ASPCOMPAT="TRUE" %><script runat="server">MyComObject comObj = new MyComObject();public void Page_Load(){   comObj.DoSomething()}</script>				
Visual j# .NET
<%@ Page Language="VJ#" ASPCOMPAT="TRUE" %><script runat="server">MyComObject comObj = new MyComObject();public void Page_Load(){  comObj.DoSomething();}</script>				
verwenden Sie stattdessen den folgenden Code:

Visual Basic .NET
<%@ Page Language="VB" ASPCOMPAT="TRUE" %><script runat="server">Dim comObj As MyComObject Public Sub Page_Load()   comObj = New MyComObject()   comObj.DoSomething()End Sub				
Visual C# .NET
<%@ Page Language="C#" ASPCOMPAT="TRUE" %><script runat="server">MyComObject comObj;public void Page_Load(){   comObj = new MyComObject();   comObj.DoSomething();}				
Visual J# .NET
<%@ Page Language="VJ#" ASPCOMPAT="TRUE" %><script runat="server">MyComObject comObj;public void Page_Load(){  comObj = new MyComObject();  comObj.DoSomething();}</script>				
Status
Es handelt sich hierbei um ein beabsichtigtes Verhalten.
Informationsquellen
Weitere Informationen finden Sie die Artikel der Microsoft Knowledge Base:
325791PRB: Zugriff verweigert Fehlermeldung Wenn Identitätswechsel in ASP.NET und Callingcard STA COM-Komponenten erfolgt
Leistung verringert hat negative Auswirkungen auf kbreadme

Warnung: Dieser Artikel wurde automatisch übersetzt.

Eigenschaften

Artikelnummer: 308095 – Letzte Überarbeitung: 02/24/2014 17:52:16 – Revision: 2.9

Microsoft ASP.NET 1.1, Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual C# .NET 2003 Standard Edition, Microsoft ASP.NET 1.0, Microsoft Visual Basic .NET 2002 Standard Edition, Microsoft Visual C# .NET 2002 Standard Edition, Microsoft Visual J# .NET 2003 Standard Edition, Microsoft .NET Framework 1.1

  • kbnosurvey kbarchive kbmt kbhttpruntime kbinterop kbperformance kbprb kbreadme kbthread KB308095 KbMtde
Feedback