Verwendung von Enterprise Services-Objekt-Pooling in Visual Basic .NET

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: 317336
Dieser Artikel wurde archiviert. Er wird im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.
Zusammenfassung
Dieser Artikel beschreibt die Objektpooling in Visual Basic .NET verwendet eine Konsolenanwendung zu erstellen. Sie können aktivieren und deaktivieren Sie das Objektpooling, um anzuzeigen, wie Objektpooling eine Anwendung auswirkt, die viele teuer Objekte erstellt.

back to the top

Voraussetzungen

Die folgende Liste führt die empfohlene Hardware, Software, Netzwerkinfrastruktur und Servicepacks, die Sie benötigen:
  • Microsoft .NET framework
  • Microsoft Windows 2000 Professional, Microsoft Windows 2000 Server, Microsoft Windows XP Professional oder Microsoft Windows XP Server
In diesem Artikel wird vorausgesetzt, dass Sie über Erfahrungen auf den folgenden Gebieten verfügen:
  • Component Object Model (COM) und Enterprise Services
  • Objektpooling
  • Verwenden von Attributen, Metadaten zu erweitern
back to the top

Erstellen Sie eine Konsolenanwendung in Visual Basic .NET

  1. Starten Sie Microsoft Visual Studio .NET.
  2. Zeigen Sie im Menü Datei auf neu , und klicken Sie auf Neues Projekt .
  3. Klicken Sie im Dialogfeld Neues Projekt klicken Sie unter Projekttypen auf Visual Basic-Projekte , und klicken Sie dann unter Vorlagen auf Konsolenanwendung .
  4. Geben Sie in das Textfeld Name PoolingDemo und klicken Sie dann auf OK .
  5. Stellen Sie sicher, dass das Fenster Projektmappen-Explorer sichtbar ist. Wenn Projektmappen-Explorer nicht sichtbar ist, drücken Sie die [STRG] + [ALT] + [L-Tastenkombination.
  6. Führen Sie diese Schritte aus, um einen Verweis auf die COM-Komponente hinzufügen, die Sie verwenden werden:
    1. Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf Verweise und klicken Sie dann auf Verweis hinzufügen .
    2. Klicken Sie auf der Registerkarte .NET auf ' System.EnterpriseServices ' in der Liste der verfügbaren Komponenten, und klicken Sie dann auf auswählen . Beachten Sie, dass System.EnterpriseServices in der Liste Ausgewählte Komponenten angezeigt wird.
    3. Klicken Sie auf OK . Beachten Sie, dass unter dem Knoten Verweise in der Konsolenanwendung System.EnterpriseServices angezeigt wird.
back to the top

Hinzufügen einer Poolable und einer nicht Poolable Klasse zum Projekt

  1. Klicken Sie mit der rechten Maustaste auf PoolingDemo im Projektmappen-Explorer, zeigen Sie auf Hinzufügen und klicken Sie dann auf Neues Element hinzufügen .
  2. Klicken Sie im Dialogfeld Neues Element hinzufügen klicken Sie unter Vorlagen auf Klasse , und klicken Sie dann auf Öffnen . Class1.vb wird standardmäßig erstellt und enthält poolfähige und nicht poolfähige Klassen.
  3. Um Objektpooling Attribute und Elemente zuzugreifen, fügen Sie den folgenden Code am Anfang der Class1.vb:
    Imports System.EnterpriseServices					
  4. Ersetzen Sie die standardmäßige Class1-Deklaration mit dem folgenden Code:
    Public Class Poolable    Sub New()        Threading.Thread.Sleep(500)    End Sub    Public Sub DoSomething()        ' Add method contents here.    End SubEnd Class						
    Hinweis, dass der Konstruktor Code enthält, die einen aufwändiger Vorgang simuliert.
  5. Das Objekt muss der ServicedComponent -Klasse stammen von den Komponentendiensten gesteuert erben Common Language Runtime. Fügen Sie folgenden Code nach der Klassendeklaration:
    Inherits ServicedComponent					
  6. Gehen Sie folgendermaßen vor um diese Klasse poolfähige zu machen:
    1. Das ObjectPoolingAttribute -Attribut, das mit den Metadaten der Klassendatei gespeichert ist kennzeichnet das Objekt zur Laufzeit pooling. Fügen Sie folgenden Code oben die Class-Deklaration der Klasse das ObjectPoolingAttribute -Attribut hinzu:
      <ObjectPooling(MinPoolSize:=0, MaxPoolSize:=1), JustInTimeActivation(True)>  _  							
      Hinweis : zwar nicht das JustInTimeActivation -Attribut erforderlich ist, um Objektpooling zu aktivieren, kann dieses Attribut in den meisten Fällen verwendet werden soll. Da es aufwändiger, erstellen und Verwerfen von Komponenten handelt, können Sie Leistung erheblich verbessern, durch mehrere Clients Komponenteninstanzen wiederverwenden.
    2. Standardmäßig gibt die CanBePooled ServicedComponent -Methode false zurück. Fügen Sie die CanBePooled -Methode überschreiben, sodass die Methode gibt true zurück, den folgenden Code:
      Protected Overrides Function CanBePooled() As Boolean        Return True    End Function						
  7. Fügen Sie die nicht poolfähige-Klasse folgenden Code hinzu:
    Public Class NonPoolable    Inherits ServicedComponent    Sub New()        ' Simulate an expensive operation.        Threading.Thread.Sleep(500)    End Sub    Public Sub DoSomething()        ' Add method contents here.    End SubEnd Class					
back to the top

Ändern Sie Module1.vb, um mehrere Instanzen von diesen Klassen erstellen

  1. Klicken Sie im Code-Editor-Fenster auf die Registerkarte Module1.vb .
  2. Fügen Sie am oberen Rand der Datei die folgende Imports -Anweisung für den EnterpriseServices -Namespace, um den Zugriff auf die DisposeObject -Methode zu ermöglichen:
    Imports System.EnterpriseServices						
    die DisposeOjbect -Methode gibt Objekte auf der Objektpool wiederverwendet werden kann.
  3. Fügen Sie die folgende Sub Main -Prozedur:
    Sub Main()        Dim StartTime As DateTime = DateTime.Now        Dim i As Int32        Const Iterations As Int16 = 50        For i = 1 To Iterations            Dim D As New NonPoolable()            D.DoSomething()            ServicedComponent.DisposeObject(D)        Next        Dim EndTime As DateTime = DateTime.Now        Dim Elapsed As TimeSpan = EndTime.Subtract(StartTime)        Dim OperationsPerSecond = Iterations / Elapsed.TotalSeconds        Console.WriteLine("Object Creations / Second = " & OperationsPerSecond)        System.Console.ReadLine()End Sub						
    dieser Code richtet eine Schleife, die eine Instanz der NonPoolable oder die Poolable -Klasse während jeder seine 50 Iterationen erstellt. Der Code zeichnet den Anfang und Ende Zeiten für die Schleife und schreibt anschließend die Anzahl der Objekte, die pro Sekunde an die Konsole erstellt werden.
back to the top

Generieren eines starken Namens für die Assembly

Sie müssen für die Assembly einen starken Namen generieren, die dieses Projekt generiert. Ohne einen starken Namen können Sie COM+-Dienste nicht verwenden, um diese Assembly zu registrieren.

Um dieses kryptografische Schlüsselpaar zu generieren, verwenden Sie das Strong Name (Sn.exe)-Tool, die sich im Ordner Bin befindet, in denen der .NET Framework Software Development Kit (SDK) installiert ist. Verwenden Sie die folgende Befehlszeile Syntax, um das Tool Sn.exe ausführen:
sn -k drive letter \ DirectoryToPlaceKey \ KeyName snk
  1. Eine Visual Studio .NET-Eingabeaufforderung öffnen, klicken Sie auf Start , zeigen Sie auf Programme , zeigen Sie auf Microsoft Visual Studio .NET , zeigen Sie auf Visual Studio .NET Tools und klicken Sie dann auf Visual Studio .NET-Eingabeaufforderung .
  2. Geben Sie an der Eingabeaufforderung folgenden Befehl ein:
    sn -k drive letter: \ Project Root Folder \poolkey.snk
  3. Drücken Sie die EINGABETASTE, um dieses Schlüsselpaar zu generieren. Beachten Sie, dass die folgende Meldung im Befehlsfenster angezeigt wird:
    Schlüsselpaar geschrieben...
  4. Dieser Schlüssel Assembly des Projekts zuzuordnen, doppelklicken Sie auf AssemblyInfo.vb im Projektmappen-Explorer. Standardmäßig enthält Assemblyattribute in dieser Datei beim Erstellen eines Projekts. Den folgenden Code zu dieser Liste von Assemblyattributen hinzufügen:
    <Assembly: AssemblyKeyFile("..\..\poolkey.snk")>					
back to the top

Vollständige Codelisten

Class1.vb

Imports System.EnterpriseServices<ObjectPooling(MinPoolSize:=0, MaxPoolSize:=1), JustInTimeActivation(True)>  _Public Class Poolable    Inherits ServicedComponent    Sub New()        ' Simulate an expensive operation.        Threading.Thread.Sleep(500)    End Sub    Public Sub DoSomething()        ' Add method contents here.    End Sub    Protected Overrides Function CanBePooled() As Boolean        Return True    End FunctionEnd ClassPublic Class NonPoolable    Inherits ServicedComponent    Sub New()        ' Simulate an expensive operation.        Threading.Thread.Sleep(500)    End Sub    Public Sub DoSomething()        ' Add method contents here.    End SubEnd Class				
back to the top

Module1.vb

Imports System.EnterpriseServicesModule Module1    Sub Main()        Dim StartTime As DateTime = DateTime.Now        Dim i As Int32        Const Iterations As Int16 = 50        For i = 1 To Iterations            'Dim D As New Poolable()            Dim D As New NonPoolable()            D.DoSomething()            ' To return the object to the object pool, use DisposeObject.            ' This allows the object to be reused from the pool. If you do not call            ' DisposeObject, the garbage collector does not collect this object,             ' and the object is not reused from the object pool.            ServicedComponent.DisposeObject(D)        Next        Dim EndTime As DateTime = DateTime.Now        Dim Elapsed As TimeSpan = EndTime.Subtract(StartTime)        Dim OperationsPerSecond = Iterations / Elapsed.TotalSeconds        Console.WriteLine("Object Creations / Second = " & OperationsPerSecond)        ' Pause until the user presses ENTER.        System.Console.ReadLine()    End SubEnd Module				
back to the top

AssemblyInfo.vb

Imports System.ReflectionImports System.Runtime.InteropServices' The following set of attributes control general information about an assembly. ' Change these attribute values to modify the information that is associated with an assembly.' Review the values of the assembly attributes.<Assembly: AssemblyTitle("")> <Assembly: AssemblyDescription("")> <Assembly: AssemblyCompany("")> <Assembly: AssemblyProduct("")> <Assembly: AssemblyCopyright("")> <Assembly: AssemblyTrademark("")> <Assembly: CLSCompliant(True)> <Assembly: AssemblyKeyFile("..\..\poolkey.snk")> 'The following GUID is for the ID of the TypeLib if you expose this project to COM.<Assembly: Guid("30324ED6-329C-4B12-BDA2-8E817F1E2079")> ' Version information for an assembly consists of the following four values:''      Major Version'      Minor Version '      Build Number'      Revision'' You can specify all of these values, or you can use the asterisk (*) for' the Build Number and the Revision values.<Assembly: AssemblyVersion("1.0.*")>				
back to the top

Funktionsprüfung

  1. Drücken Sie F5, um die Anwendung im Debugmodus auszuführen. Beachten Sie, dass diese Instanzen der NonPoolable -Klasse erstellt wird.
  2. Warten Sie ca. 25 Sekunden. Beachten Sie, dass die folgende Meldung angezeigt:
    Objekt erstellen / Sekunde = 1.73542243764044
    Hinweis : die genaue Anzahl der Erstellungen pro Sekunde variieren.
  3. Drücken Sie EINGABETASTE, um die Konsolenanwendung zu beenden und zur Visual Studio .NET zurückzukehren.
  4. Ändern Sie Module1.vb, um Instanzen der Poolable -Klasse erstellen. Ändern Sie die erste Zeile in die Sub Main -Prozedur wie folgt:
    Dim D As New Poolable()					
  5. Drücken Sie F5, um die Anwendung erneut auszuführen.
  6. Warten Sie wenige Sekunden. Beachten Sie, dass die folgende angezeigt (oder ähnlich) angezeigt wird:
    Objekt erstellen / Sekunde = 29.1977213631085
    Die deutliche Verbesserung der Leistung beachten, wenn Sie-Objekt verwenden, pooling.
  7. Drücken Sie EINGABETASTE, um die Konsolenanwendung zu beenden und zur Visual Studio .NET zurückzukehren.
back to the top

Problembehandlung

Vergessen Sie nicht, CanBePooled überschreiben. Wenn Sie diese Schritt weglassen, kann nicht das Objekt pool werden.

back to the top

Informationsquellen

Weitere Informationen zum Implementieren und Bereitstellen von konfiguriert COM+-Klassen mithilfe der common Language Runtime, wie Objektkontext zugreifen und Kontext aufgerufen und zum Kontext relativ Objektverweise verwalten, finden Sie auf folgenden Microsoft-Website:
COM+ Integration: How .NET Enterprise Services Sie Hilfe können verteilten erstellen Anwendungen
http://msdn.microsoft.com/en-us/library/bb985615.aspx
back to the top

Warnung: Dieser Artikel wurde automatisch übersetzt.

Eigenschaften

Artikelnummer: 317336 – Letzte Überarbeitung: 01/11/2015 04:32:37 – Revision: 4.4

Microsoft .NET Framework-Klassenbibliotheken 1.0, Microsoft Enterprise Services (included with the .NET Framework) 1.0, Microsoft Visual Basic .NET 2002 Standard Edition

  • kbnosurvey kbarchive kbmt kbhowtomaster KB317336 KbMtde
Feedback