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

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 317336 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Auf dieser Seite

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.

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

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.

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 Sub
    End 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 Sub
    End Class
    					

Ä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.

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")>
    					

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 Function
End Class

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 Sub
End Class
				

Module1.vb

Imports System.EnterpriseServices

Module 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 Sub

End Module
				

AssemblyInfo.vb

Imports System.Reflection
Imports 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.*")>
				

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.

Problembehandlung

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

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

Eigenschaften

Artikel-ID: 317336 - Geändert am: Donnerstag, 15. Juli 2004 - Version: 4.4
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft .NET Framework-Klassenbibliotheken 1.0
  • Microsoft Enterprise Services (included with the .NET Framework) 1.0
  • Microsoft Visual Basic .NET 2002 Standard Edition
Keywords: 
kbmt kbhowtomaster KB317336 KbMtde
Maschinell übersetzter Artikel
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
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com