Comment faire pour utiliser Enterprise Services objet regroupement dans Visual Basic .NET

Traductions disponibles Traductions disponibles
Numéro d'article: 317336 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Sommaire

Résumé

Cet article explique comment créer une application de console qui utilise le pool d'objet dans Visual Basic .NET. Vous pouvez activer et désactiver le pool d'objet pour voir comment pool d'objet affecte une application qui crée plusieurs objets coûteuses.

Configuration requise

La liste suivante met en évidence le matériel recommandé, logiciel infrastructure réseau et service packs dont vous avez besoin :
  • Microsoft .NET framework
  • Microsoft Windows 2000 Professionnel, Microsoft Windows 2000 Server, Microsoft Windows XP Professionnel ou Microsoft Windows XP Server
Cet article suppose que vous êtes familiarisé avec les sujets suivants :
  • Component Object Model (COM) et Enterprise Services
  • Objet regroupement
  • L'utilisation d'attributs pour étendre des métadonnées

Créer une application console dans Visual Basic .NET

  1. Démarrez Microsoft Visual Studio .NET.
  2. Dans le menu Fichier , pointez sur Nouveau , puis cliquez sur Nouveau projet .
  3. Dans la boîte de dialogue Nouveau projet , cliquez sur projets Visual Basic sous types de projet , puis cliquez sur application console sous modèles .
  4. Dans la zone de texte Nom , tapez PoolingDemo et puis cliquez sur OK .
  5. Assurez-vous que la fenêtre Explorateur de solutions est visible. Si l'Explorateur de solutions n'est pas visible, appuyez sur la combinaison de touches CTRL + ALT + L.
  6. Procédez comme suit pour ajouter une référence au composant COM que vous utiliserez :
    1. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur Références , puis cliquez sur Ajouter une référence .
    2. Sous l'onglet .NET , cliquez sur System.EnterpriseServices dans la liste des composants disponibles, puis cliquez sur Sélectionner . Notez que System.EnterpriseServices apparaît dans la liste composants sélectionnés .
    3. Cliquez sur OK . Notez que System.EnterpriseServices apparaît sous le n?ud Références dans l'application de console.

Ajouter un Poolable et une classe non Poolable au projet

  1. Cliquez avec le bouton droit sur PoolingDemo dans l'Explorateur de solutions, pointez sur Ajouter , puis cliquez sur Ajouter un nouvel élément .
  2. Dans la boîte de dialogue Ajouter un nouvel élément , cliquez sur classe sous modèles , puis cliquez sur Ouvrir . Class1.vb est créé par défaut et contient des classes poolable et non poolable.
  3. Pour accéder à objet regroupement attributs et des membres, ajoutez le code suivant vers le haut de Class1.vb :
    Imports System.EnterpriseServices
    					
  4. Remplacez la déclaration de Class1 par défaut par le code suivant :
    Public Class Poolable
        Sub New()
            Threading.Thread.Sleep(500)
        End Sub
        Public Sub DoSomething()
            ' Add method contents here.
        End Sub
    End Class
    						
    avertissement que le constructeur contient code qui simule une opération coûteuse.
  5. L'objet doit hériter de la classe ServicedComponent fournis sous le contrôle de services de composants runtime. Ajoutez le code suivant après la déclaration de classe :
    Inherits ServicedComponent
    					
  6. Pour rendre cette classe poolable, procédez comme suit :
    1. L'attribut ObjectPoolingAttribute , qui est enregistré avec les métadonnées du fichier de classe, indicateurs de l'objet de regroupement au moment de l'exécution. Ajoutez le code suivant au-dessus de la déclaration de classe pour ajouter l'attribut ObjectPoolingAttribute à la classe :
      <ObjectPooling(MinPoolSize:=0, MaxPoolSize:=1), JustInTimeActivation(True)>  _  
      							
      Remarque : bien que l'attribut JustInTimeActivation n'est pas nécessaire pour activer le groupement, vous souhaiterez peut-être utiliser cet attribut dans la plupart des cas. Étant donné qu'il est coûteux pour créer et supprimer des composants, vous pouvez améliorer sensiblement performances en permettant à plusieurs clients à réutiliser les instances des composants.
    2. La méthode de ServicedComponent CanBePooled renvoie False par défaut. Pour remplacer la méthode CanBePooled afin que la méthode renvoie la valeur True , ajoutez le code suivant :
      Protected Overrides Function CanBePooled() As Boolean
              Return True
          End Function
      						
  7. Ajoutez le code suivant à la classe non poolable :
    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
    					

Modifier Module1.vb pour créer plusieurs instances de ces classes

  1. Dans la fenêtre de l'éditeur de code, cliquez sur l'onglet Module1.vb .
  2. En haut du fichier, ajoutez l'instruction Imports suivante de l'espace de noms EnterpriseServices autoriser l'accès à la méthode DisposeObject :
    Imports System.EnterpriseServices
    						
    la méthode DisposeOjbect renvoie des objets à la liste objet, qui permet leur être réutilisé.
  3. Ajoutez la procédure Sub Main suivante :
    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
    						
    ce code définit une boucle qui crée une instance de la NonPoolable ou la classe Poolable lors de chacune de ses itérations 50. Le code enregistre le début et la fin heures pour la boucle et enregistre le nombre d'objets qui sont créés par seconde à la console.

Générer un nom fort pour l'assembly

Vous devez générer un nom fort de l'assembly qui générera ce projet. Sans un nom fort, vous ne pouvez pas utiliser des services COM + pour enregistrer cet assembly.

Pour générer cette paire de clés cryptographique, utiliser l'outil Strong Name (Tool Sn.exe), qui se trouve dans le dossier d'emplacement dans lequel le Kit de développement SDK de .NET Framework est installé. Utilisez la syntaxe de ligne de commande suivante pour exécuter l'outil Tool Sn.exe :
sn -k drive letter \ DirectoryToPlaceKey \ KeyName .snk
  1. Pour ouvrir une invite de commande Visual Studio .NET, cliquez sur Démarrer , pointez sur programmes , pointez sur Visual Studio .NET , pointez sur Outils de Visual Studio .NET , puis cliquez sur invite de commande Visual Studio .NET .
  2. À l'invite de commandes, tapez la commande suivante :
    sn -k drive letter: \ Project Root Folder \poolkey.snk
  3. Appuyez sur la touche ENTRÉE pour générer la paire de clés. Notez que le message suivant s'affiche dans la fenêtre de commande :
    Paire de clés écrites sur...
  4. Pour associer cette clé avec assembly du projet, double-cliquez sur AssemblyInfo.vb dans l'Explorateur de solutions. Par défaut, Visual Studio .NET inclut les attributs assembly dans ce fichier lorsque vous créez un projet. Ajouter le code suivant à cette liste d'attributs d'assembly :
    <Assembly: AssemblyKeyFile("..\..\poolkey.snk")>
    					

Exécuter le contenu du code

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

Vérifiez qu'il fonctionne

  1. Appuyez sur la touche F5 pour exécuter l'application en mode débogage. Notez que cela crée des instances de la classe NonPoolable .
  2. Attendez environ 25 secondes. Notez que le message suivant s'affiche :
    Objet créations/deuxième = 1.73542243764044
    Remarque : le nombre exact de créations par seconde peut-être varier.
  3. Appuyez sur ENTRÉE pour quitter l'application de console et revenir à Visual Studio .NET.
  4. Modifier Module1.vb pour créer des instances de la classe Poolable . Modifiez la première ligne de la procédure Sub Main comme suit :
    Dim D As New Poolable()
    					
  5. Appuyez sur F5 pour exécuter l'application à nouveau.
  6. Attendez quelques secondes. Notez que le suivant message (ou similaires) s'affiche :
    Objet créations/deuxième = 29.1977213631085
    Notez l'amélioration significative des performances lorsque vous utilisez l'objet regroupement.
  7. Appuyez sur ENTRÉE pour quitter l'application de console et revenir à Visual Studio .NET.

Résolution des problèmes

N'oubliez pas de remplacer CanBePooled . Si vous omettez cette étape, vous ne pouvez pas pool l'objet.

RÉFÉRENCES

Pour savoir comment implémenter et déployer COM + configuré classes à l'aide le langage commun runtime, comment accéder aux contexte de l'objet et appelle le contexte et comment gérer les références d'objet et le contexte relatif, consultez site Web de Microsoft à l'adresse suivante :
Intégration de COM +: comment .NET Enterprise Services peuvent vous aident à créer applications distribuées
http://msdn.microsoft.com/en-us/library/bb985615.aspx

Propriétés

Numéro d'article: 317336 - Dernière mise à jour: jeudi 15 juillet 2004 - Version: 4.4
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft .NET Framework Class Libraries 1.0
  • Microsoft Enterprise Services (included with the .NET Framework) 1.0
  • Microsoft Visual Basic .NET 2002 Initiation
Mots-clés : 
kbmt kbhowtomaster KB317336 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 317336
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

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