Como usar o objeto de serviços corporativos pool no Visual Basic .NET

Traduções deste artigo Traduções deste artigo
ID do artigo: 317336 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

Sumário

Este artigo demonstra como criar um aplicativo de console que usa o pool de objetos no Visual Basic. NET. Você pode ativar e desativar o pool de objetos para ver como o pool de objetos afeta um aplicativo que cria vários objetos caros.

Requisitos

A lista a seguir descreve o hardware recomendado, software, infra-estrutura de rede e service packs que você precisa:
  • Microsoft .NET framework
  • Microsoft Windows 2000 Professional, Microsoft Windows 2000 Server, Microsoft Windows XP Professional ou Microsoft Windows XP Server
Este artigo pressupõe que você esteja familiarizado com os seguintes tópicos:
  • Modelo de objeto componente (COM) e o Enterprise Services
  • Ao pool de objetos
  • Usar atributos para estender metadados

Criar um aplicativo de console no Visual Basic .NET

  1. Inicie o Microsoft Visual Studio NET..
  2. No menu arquivo , aponte para novo e, em seguida, clique em New Project .
  3. Na caixa de diálogo New Project , clique em Projetos do Visual Basic em Tipos de projeto e, em seguida, clique em Aplicativo de console em modelos .
  4. Na caixa de texto nome , digite PoolingDemo e, em seguida, clique em OK .
  5. Verifique se a janela do Solution Explorer está visível. Se o Solution Explorer não estiver visível, pressione a combinação de teclas CTRL + ALT + L.
  6. Siga estas etapas para adicionar uma referência ao componente COM que você estará usando:
    1. No Solution Explorer, clique com o botão direito do mouse em References e, em seguida, clique em Add Reference .
    2. Na guia .NET , clique em System.EnterpriseServices na lista de componentes disponíveis e, em seguida, clique em Selecionar . Observe que System.EnterpriseServices aparece na lista Componentes selecionados .
    3. Clique em OK . Observe que System.EnterpriseServices aparece sob o nó References no aplicativo de console.

Adicionar um Poolable e uma classe não Poolable o projeto

  1. Clique com o botão direito PoolingDemo no Solution Explorer, aponte para Add e, em seguida, clique em Add New Item .
  2. Na caixa de diálogo Add New Item , clique em Class em modelos e, em seguida, clique em Abrir . Class1.vb é criado por padrão e contém classes poolable e não poolable.
  3. Para acessar o objeto pool atributos e membros, adicionar o código a seguir para a parte superior da Class1.vb:
    Imports System.EnterpriseServices
    					
  4. Substitua a declaração de Class1 padrão com o seguinte código:
    Public Class Poolable
        Sub New()
            Threading.Thread.Sleep(500)
        End Sub
        Public Sub DoSomething()
            ' Add method contents here.
        End Sub
    End Class
    						
    aviso que o construtor contém código que simula uma operação cara.
  5. O objeto deve herdar da classe ServicedComponent para vêm sob o controle de serviços de componente em tempo de execução. Adicione o seguinte código após a declaração da classe:
    Inherits ServicedComponent
    					
  6. Para tornar essa classe poolable, execute estas etapas:
    1. O atributo ObjectPoolingAttribute , que é salvo com os metadados do arquivo de classe, sinaliza o objeto de pool em tempo de execução. Adicione o seguinte código acima a declaração de classe para adicionar o atributo ObjectPoolingAttribute à classe:
      <ObjectPooling(MinPoolSize:=0, MaxPoolSize:=1), JustInTimeActivation(True)>  _  
      							
      Observação : Embora o atributo JustInTimeActivation não é necessária para ativar o pool, talvez queira usar esse atributo na maioria dos casos. Como é caro para criar e descartar componentes, você pode melhorar o desempenho significativamente, permitindo que vários clientes a reutilização de instâncias de componentes.
    2. O método de ServicedComponent CanBePooled retorna False por padrão. Para substituir o método CanBePooled para que o método retorna True , adicione o seguinte código:
      Protected Overrides Function CanBePooled() As Boolean
              Return True
          End Function
      						
  7. Adicione o seguinte código à classe não 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
    					

Modificar Module1.vb para criar várias instâncias dessas classes

  1. Na janela Code Editor, clique na guia Module1.vb .
  2. Na parte superior do arquivo, adicione a seguinte instrução Imports para o namespace EnterpriseServices para permitir o acesso ao método DisposeObject :
    Imports System.EnterpriseServices
    						
    o método DisposeOjbect retorna objetos para o pool de objeto, que permitirá a ser reutilizado.
  3. Adicione o seguinte procedimento 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 um loop que cria uma instância de NonPoolable ou a classe Poolable durante cada um de seus 50 iterações. O código registra o início e final horas para o loop e, em seguida, grava o número de objetos que são criadas por segundo ao console.

Gerar um nome de alta segurança para o assembly

Você deve gerar um nome forte para o assembly que irá gerar este projeto. Sem um nome de alta segurança, você não pode usar serviços COM + para registrar este assembly.

Para gerar esse par de chaves criptográfica, use a ferramenta Strong Name (sn.exe), que está localizada na pasta bin onde o .NET Framework Software Development Kit (SDK) está instalado. Use a seguinte sintaxe de linha de comando para executar a ferramenta sn.exe:
sn k - drive letter \ DirectoryToPlaceKey \ KeyName .snk
  1. Para abrir um prompt de comando Visual Studio .NET, clique em Iniciar , aponte para programas , aponte para Microsoft Visual Studio. NET , aponte para Visual Studio .NET Tools e, em seguida, clique em Visual Studio .NET Command Prompt .
  2. No prompt de comando, digite o seguinte comando:
    sn k - drive letter: \ Project Root Folder \poolkey.snk
  3. Pressione a tecla ENTER para gerar o par de chaves. Observe que a seguinte mensagem é exibida na janela de comando:
    Par de chaves gravados...
  4. Para associar essa chave assembly do projeto, clique duas vezes AssemblyInfo.vb no Solution Explorer. Por padrão, o Visual Studio .NET inclui atributos assembly neste arquivo quando você cria um projeto. Adicionar o código a seguir à lista de atributos do assembly:
    <Assembly: AssemblyKeyFile("..\..\poolkey.snk")>
    					

Listagens de código concluída

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

Verificar se ele funciona

  1. Pressione a tecla F5 para executar o aplicativo no modo de depuração. Observe que isso cria instâncias da classe NonPoolable .
  2. Aguarde cerca de 25 segundos. Observe que a seguinte mensagem é exibida:
    Objeto criações / segundo = 1.73542243764044
    Observação : O número exato de criações por segundo pode variar.
  3. Pressione ENTER para sair do aplicativo de console e para retornar ao Visual Studio. NET.
  4. Modificar Module1.vb para criar instâncias da classe Poolable . Alterar a primeira linha no procedimento Sub Main da seguinte maneira:
    Dim D As New Poolable()
    					
  5. Pressione F5 para executar o aplicativo novamente.
  6. Aguarde alguns segundos. Observe que a seguinte mensagem (ou semelhante) aparece:
    Objeto criações / segundo = 29.1977213631085
    Observe o aperfeiçoamento significativo no desempenho quando você usa o objeto pool.
  7. Pressione ENTER para sair do aplicativo de console e para retornar ao Visual Studio. NET.

Solução de problemas

Não se esqueça de substituir CanBePooled . Se você omitir esta etapa, você não pode pool o objeto.

REFERÊNCIAS

Para obter mais informações sobre como implementar e implantar COM + configurado classes usando o common language runtime, como acessar o contexto de objeto e chamar o contexto e como gerenciar referências de objeto de contexto relativo, consulte o seguinte site da Microsoft:
COM + Integration: Como .NET Enterprise Services podem ajudar você construir aplicativos distribuídos
http://msdn.microsoft.com/en-us/library/bb985615.aspx

Propriedades

ID do artigo: 317336 - Última revisão: quinta-feira, 15 de julho de 2004 - Revisão: 4.4
A informação contida neste artigo aplica-se a:
  • Bibliotecas de Classes do Microsoft .NET Framework 1.0
  • Microsoft Enterprise Services (included with the .NET Framework) 1.0
  • Microsoft Visual Basic .NET 2002 Standard Edition
Palavras-chave: 
kbmt kbhowtomaster KB317336 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 317336

Submeter comentários

 

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