Como utilizar o agrupamento de objectos de serviços de empresa no Visual Basic .NET

Traduções de Artigos Traduções de Artigos
Artigo: 317336 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Este artigo demonstra como criar uma aplicação de consola que utiliza o agrupamento de objectos no Visual Basic. NET. Pode activar e desactivar o agrupamento de objectos para ver como o agrupamento de objectos afecta uma aplicação que cria muitos objectos dispendiosos.

Requisitos

A lista seguinte descreve o hardware recomendado, software, infra-estrutura de rede e service packs que necessita:
  • 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 está familiarizado com os seguintes tópicos:
  • Component Object Model (COM) e Enterprise Services
  • Agrupamento de objectos
  • Utilizar atributos para expandir metadados

Criar uma aplicação de consola no Visual Basic .NET

  1. Inicie o Microsoft Visual Studio NET..
  2. No menu ficheiro , aponte para Novo e, em seguida, clique em Novo projecto .
  3. Na caixa de diálogo Novo projecto , clique em Projectos do Visual Basic em Project Types e, em seguida, clique em Aplicação de consola em modelos .
  4. Na caixa de texto nome , escreva PoolingDemo e, em seguida, clique em OK .
  5. Certifique-se que a janela Solution Explorer está visível. Se Solution Explorer não estiver visível, prima a combinação de teclas CTRL + ALT + L.
  6. Siga estes passos para adicionar uma referência ao componente COM que vai utilizar:
    1. No Solution Explorer, clique com o botão direito do rato em References e, em seguida, clique em Add Reference .
    2. No separador .NET , clique em System.EnterpriseServices na lista de componentes disponíveis e, em seguida, clique em Seleccionar . Repare que System.EnterpriseServices aparece na lista Componentes seleccionados .
    3. Clique em OK . Repare que System.EnterpriseServices aparece sob o nó de referências a aplicação da consola.

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

  1. Clique com o botão direito do rato PoolingDemo no Solution Explorer, aponte para Adicionar e, em seguida, clique em Adicionar novo item .
  2. Na caixa de diálogo Adicionar novo item , clique em classe em modelos e, em seguida, clique em Abrir . Class1.VB é criado por predefinição e contém as classes poolable e não poolable.
  3. Para aceder ao objecto de agrupamento de atributos e membros, adicione o seguinte código para a parte superior da Class1.vb:
    Imports System.EnterpriseServices
    					
  4. Substituir a declaração de Aula1 predefinido 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 de que o construtor contém código que simula uma operação dispendiosa.
  5. O objecto tem de herdar a classe de ServicedComponent ficar sob o controlo de serviços de componentes do tempo de execução. Adicione o seguinte código depois de declaração da classe:
    Inherits ServicedComponent
    					
  6. Para tornar esta classe poolable, siga estes passos:
    1. O atributo ObjectPoolingAttribute , que é guardado com os metadados do ficheiro de classe, assinala o objecto para o agrupamento em tempo de execução. Adicione o seguinte código acima a declaração de classe para adicionar o atributo ObjectPoolingAttribute a classe:
      <ObjectPooling(MinPoolSize:=0, MaxPoolSize:=1), JustInTimeActivation(True)>  _  
      							
      Nota : Embora o atributo JustInTimeActivation não é necessária para activar o agrupamento, poderá pretender utilizar este atributo na maioria dos casos. Porque é dispendiosa para criar e eliminar componentes, pode melhorar o desempenho significativamente, permitindo que múltiplos clientes reutilizar ocorrências de componentes.
    2. O método de ServicedComponent CanBePooled devolve false por predefinição. Para substituir o método CanBePooled para que o método devolve Verdadeiro , 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 destas classes

  1. Na janela Code Editor, clique no separador Module1.vb .
  2. Na parte superior do ficheiro, adicione a seguinte instrução de importações para o espaço de nomes EnterpriseServices permitir o acesso ao método DisposeObject :
    Imports System.EnterpriseServices
    						
    o método DisposeOjbect devolve objectos ao conjunto de objectos, permite-lhes 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 ciclo que cria uma instância de NonPoolable ou a classe Poolable durante cada um dos respectivas 50 iterações. O código de registos de início e o fim tempo para o ciclo e, em seguida, escreve o número de objectos criados por segundo à consola.

Gerar um nome seguro para a assemblagem

É deve gerar um nome seguro para a assemblagem que irá gerar este projecto. Sem um nome seguro, pode utilizar serviços COM + para registar esta assemblagem.

Para gerar este par de chaves criptográfica, utilize a ferramenta nome seguro (Sn.exe), que está localizada na pasta posição em que o .NET Framework Software Development Kit (SDK) está instalado. Utilize a seguinte sintaxe da linha de comandos para executar a ferramenta Sn.exe:
sn -k drive letter \ DirectoryToPlaceKey \ KeyName .snk
  1. Para abrir uma linha de comandos Visual Studio. NET, clique em Iniciar , aponte para programas , aponte para Microsoft Visual Studio. NET , aponte para Ferramentas do Visual Studio .NET e, em seguida, clique em Visual Studio .NET Command Prompt .
  2. Na linha de comandos, escreva o seguinte comando:
    sn -k drive letter: \ \poolkey.snk da Project Root Folder
  3. Prima a tecla ENTER para gerar o par de chaves. Repare que a mensagem seguinte é apresentada na janela de comandos:
    Par de chaves escritas...
  4. Para associar esta chave de assemblagem do projecto, faça duplo clique AssemblyInfo.vb no Solution Explorer. Por predefinição, Visual Studio .NET inclui atributos de assemblagem neste ficheiro quando cria um projecto. Adicionar o seguinte código a esta lista de atributos de assemblagem:
    <Assembly: AssemblyKeyFile("..\..\poolkey.snk")>
    					

Concluir lista de código

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 funciona

  1. Prima a tecla F5 para executar a aplicação no modo de depuração. Repare que este procedimento cria instâncias da classe NonPoolable .
  2. Aguarde aproximadamente 25 segundos. Repare que é apresentada a seguinte mensagem:
    Criação do objecto / segundo = 1.73542243764044
    Nota : O número exacto de criações de, por segundo pode variar.
  3. Prima ENTER para sair da aplicação de consola e para voltar ao Visual Studio. NET.
  4. Modificar Module1.vb para criar instâncias da classe Poolable . Altere a primeira linha no procedimento Sub Main da seguinte forma:
    Dim D As New Poolable()
    					
  5. Prima F5 para executar a aplicação novamente.
  6. Aguarde uns segundos. Repare que a seguinte mensagem (ou semelhante) é apresentado:
    Criação do objecto / segundo = 29.1977213631085
    Tenha em atenção as melhorias significativas no desempenho quando utiliza o objecto de agrupamento.
  7. Prima ENTER para sair da aplicação de consola e para voltar ao Visual Studio. NET.

Resolução de problemas

Se não esqueça substituir CanBePooled . Se omitir este passo, não é possível conjunto o objecto.

REFERÊNCIAS

Para mais informações sobre como implementar e implementar + configurado classes utilizando a linguagem comum tempo de execução, como aceder a objecto de contexto e chamar contexto e como gerir referências a objectos contexto relativo, consulte o seguinte Web site da Microsoft:
Integração COM +: Como .NET Enterprise Services podem ajudar o utilizador criar aplicações distribuídas
http://msdn.microsoft.com/en-us/library/bb985615.aspx

Propriedades

Artigo: 317336 - Última revisão: 15 de julho de 2004 - Revisão: 4.4
A informação contida neste artigo aplica-se a:
  • Bibliotecas de classe 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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