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
Inicie o Microsoft Visual Studio NET..
No menu arquivo , aponte para novo e, em seguida, clique em New Project .
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 .
Na caixa de texto nome , digite PoolingDemo e, em seguida, clique em OK .
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.
Siga estas etapas para adicionar uma referência ao componente COM que você estará usando:
No Solution Explorer, clique com o botão direito do mouse em References e, em seguida, clique em Add Reference .
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 .
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
Clique com o botão direito PoolingDemo no Solution Explorer, aponte para Add e, em seguida, clique em Add New Item .
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.
Para acessar o objeto pool atributos e membros, adicionar o código a seguir para a parte superior da Class1.vb:
Imports System.EnterpriseServices
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.
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
Para tornar essa classe poolable, execute estas etapas:
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:
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.
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
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
Na janela Code Editor, clique na guia Module1.vb .
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.
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
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 .
No prompt de comando, digite o seguinte comando:
sn k - drive letter: \ Project Root Folder \poolkey.snk
Pressione a tecla ENTER para gerar o par de chaves. Observe que a seguinte mensagem é exibida na janela de comando:
Par de chaves gravados...
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
Pressione a tecla F5 para executar o aplicativo no modo de depuração. Observe que isso cria instâncias da classe NonPoolable .
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.
Pressione ENTER para sair do aplicativo de console e para retornar ao Visual Studio. NET.
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()
Pressione F5 para executar o aplicativo novamente.
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.
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:
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
Quanto esforço foi necessário para seguir os procedimentos deste artigo?
Muito baixo
Baixo
Moderado
Alto
Muito alto
Diga-nos o porque e o que podemos fazer para melhorar esta informação
Obrigado! Seus comentários são usados para nos ajudar a aperfeiçoar o conteúdo de suporte. Para obter mais opções de ajuda, visite a Home Page de Ajuda e Suporte.