Cómo utilizar la agrupación de objetos de Enterprise Services en Visual Basic .NET

Seleccione idioma Seleccione idioma
Id. de artículo: 317336 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Resumen

En este artículo muestra cómo crear una aplicación de consola que utiliza la agrupación de objetos en Visual Basic. NET. Puede activar y desactivar el agrupamiento de objetos para ver cómo afecta la agrupación de objetos a una aplicación que crea muchos objetos costosos.

Requisitos

En la lista siguiente se describe el hardware, el software, la infraestructura de red y los service pack recomendados que se necesitarán:
  • Microsoft .NET framework
  • Microsoft Windows 2000 Professional, Microsoft Windows 2000 Server, Microsoft Windows XP Professional o Microsoft Windows XP Server
En este artículo se supone que está familiarizado con los temas siguientes:
  • Modelo de objetos componentes (COM) y Enterprise Services
  • Agrupación de objetos
  • Utilizar atributos para extender metadatos

Crear una aplicación de consola en Visual Basic .NET

  1. Inicie Microsoft Visual Studio NET..
  2. En el menú archivo , seleccione nuevo y, a continuación, haga clic en Nuevo proyecto .
  3. En el cuadro de diálogo Nuevo proyecto , haga clic en Proyectos de Visual Basic bajo Tipos de proyecto y, después, haga clic en Aplicación de consola en plantillas .
  4. En el cuadro de texto nombre , escriba PoolingDemo y, a continuación, haga clic en Aceptar .
  5. Asegúrese de que la ventana Explorador de soluciones está visible. Si el Explorador de soluciones no está visible, presione la combinación de teclas CTRL + ALT + L.
  6. Siga estos pasos para agregar una referencia al componente COM que va a utilizar:
    1. En el Explorador de soluciones, haga clic con el botón secundario en referencias y, a continuación, haga clic en Agregar referencia .
    2. En la ficha .NET , haga clic en System.EnterpriseServices en la lista de componentes disponibles y, a continuación, haga clic en seleccionar . Observe que System.EnterpriseServices aparece en la lista Componentes seleccionados .
    3. Haga clic en Aceptar . Observe que System.EnterpriseServices aparece bajo el nodo referencias en la aplicación de consola.

Agregar un agrupables y una clase no agrupables al proyecto

  1. Haga clic con el botón secundario en PoolingDemo en el Explorador de soluciones, elija Agregar y, a continuación, haga clic en Agregar nuevo elemento .
  2. En el cuadro de diálogo Agregar nuevo elemento , haga clic en clase en plantillas y, a continuación, haga clic en Abrir . Class1.vb se crea de forma predeterminada y contiene clases agrupables y no agrupables.
  3. Para tener acceso a la agrupación de atributos y miembros de objeto, agregue el código siguiente a la parte superior de Class1.vb:
    Imports System.EnterpriseServices
    					
  4. Reemplace la declaración de Class1 predeterminada con el código siguiente:
    Public Class Poolable
        Sub New()
            Threading.Thread.Sleep(500)
        End Sub
        Public Sub DoSomething()
            ' Add method contents here.
        End Sub
    End Class
    						
    aviso que el constructor contiene código que simula una operación costosa.
  5. El objeto debe heredar la clase ServicedComponent proceder bajo el control de los servicios de componentes en tiempo de ejecución. Agregue el código siguiente después de la declaración de clase:
    Inherits ServicedComponent
    					
  6. Para hacer que esta clase agrupables, siga estos pasos:
    1. El atributo ObjectPoolingAttribute , que se guarda con los metadatos del archivo de clase, marca el objeto para la agrupación en tiempo de ejecución. Agregue el código siguiente encima de la declaración de clase para agregar el atributo ObjectPoolingAttribute a la clase:
      <ObjectPooling(MinPoolSize:=0, MaxPoolSize:=1), JustInTimeActivation(True)>  _  
      							
      Nota : aunque el atributo JustInTimeActivation no es necesario para habilitar la agrupación, quizás desee utilizar este atributo en la mayoría de los casos. Puesto que es costoso para crear y descartar los componentes, se puede mejorar el rendimiento considerablemente permitiendo que varios clientes reutilizar las instancias del componente.
    2. El método de ServicedComponent CanBePooled devuelve false de forma predeterminada. Reemplazar el método CanBePooled para que el método devuelve true , agregue el código siguiente:
      Protected Overrides Function CanBePooled() As Boolean
              Return True
          End Function
      						
  7. Agregue el código siguiente a la clase no agrupables:
    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
    					

Modificar Module1.vb para crear varias instancias de estas clases

  1. En la ventana del Editor de código, haga clic en la ficha de Module1.vb .
  2. En la parte superior del archivo, agregue la siguiente instrucción Imports del espacio de nombres EnterpriseServices permitir el acceso al método DisposeObject :
    Imports System.EnterpriseServices
    						
    el método DisposeOjbect devuelve objetos al grupo de objeto, lo que permite volver a utilizar.
  3. Agregue el siguiente procedimiento Sub Main :
    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
    						
    este código configura un bucle que crea una instancia de la NonPoolable o la clase Poolable durante cada una de sus 50 iteraciones. El código registra el inicio y final veces para el bucle y, a continuación, escribe el número de objetos que se crean por segundo en la consola.

Generar un nombre seguro del ensamblado

Debe generar un nombre seguro para el ensamblado que genere este proyecto. Sin un nombre seguro, no puede utilizar los servicios COM + para registrar este ensamblado.

Para generar este par de claves criptográficas, utilice la herramienta nombre seguro (Sn.exe), que se encuentra en la carpeta bin donde está instalado el Kit de desarrollo de software (SDK) de .NET Framework. Utilice la siguiente sintaxis de línea de comandos para ejecutar la herramienta sn.exe:
sn -k drive letter \ DirectoryToPlaceKey \ KeyName .snk
  1. Para abrir un símbolo del sistema de Visual Studio. NET, haga clic en Inicio , seleccione programas , Visual Studio.NET , Herramientas de Visual Studio .NET y a continuación, haga clic en Visual Studio .NET .
  2. En el símbolo del sistema, escriba el comando siguiente:
    sn -k drive letter: \ \poolkey.snk de Project Root Folder
  3. Presione la tecla ENTRAR para generar el par de claves. Observe que aparece el mensaje siguiente en la ventana de comandos:
    Par de claves escrito en...
  4. Para asociar esta clave de ensamblado del proyecto, haga doble clic en AssemblyInfo.vb en el Explorador de soluciones. De forma predeterminada, Visual Studio .NET incluye atributos de ensamblado en este archivo cuando se crea un proyecto. Agregue el código siguiente a esta lista de atributos de ensamblado:
    <Assembly: AssemblyKeyFile("..\..\poolkey.snk")>
    					

Código completo

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

Comprobar que funciona

  1. Presione la tecla F5 para ejecutar la aplicación en modo de depuración. Observe que esto crea instancias de la clase NonPoolable .
  2. Espere aproximadamente 25 segundos. Observe que aparece el mensaje siguiente:
    Objeto creaciones / segundo = 1.73542243764044
    Nota : puede variar el número exacto de creaciones por segundo.
  3. Presione ENTRAR para salir de la aplicación de consola y volver a Visual Studio. NET.
  4. Modificar Module1.vb para crear instancias de la clase Poolable . Cambie la primera línea en el procedimiento Sub Main como sigue:
    Dim D As New Poolable()
    					
  5. Presione F5 para ejecutar de nuevo la aplicación.
  6. Espere unos segundos. Observe que la aparece después de mensaje (o similar):
    Objeto creaciones / segundo = 29.1977213631085
    Tenga en cuenta la mejora considerable del rendimiento al utilizar objeto agrupación.
  7. Presione ENTRAR para salir de la aplicación de consola y volver a Visual Studio. NET.

Solución de problemas

No olvide reemplazar CanBePooled . Si omite este paso, no se puede agrupar el objeto.

REFERENCIAS

Para obtener más información sobre cómo implementar y distribuir COM + configurado clases utilizando common language runtime, cómo tener acceso de contexto del objeto y llamar a contexto y cómo administrar las referencias de objeto de contexto, consulte el siguiente sitio Web de Microsoft:
COM + Integration: How .NET Enterprise Services pueden ayudarle a generar aplicaciones distribuidas
http://msdn.microsoft.com/en-us/library/bb985615.aspx

Propiedades

Id. de artículo: 317336 - Última revisión: jueves, 15 de julio de 2004 - Versión: 4.4
La información de este artículo se refiere a:
  • Microsoft .NET Framework Class Libraries 1.0
  • Microsoft Enterprise Services (included with the .NET Framework) 1.0
  • Microsoft Visual Basic .NET 2002 Standard Edition
Palabras clave: 
kbmt kbhowtomaster KB317336 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 317336

Enviar comentarios

 

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