Utilizzo di pool di oggetti di Enterprise Services in Visual Basic .NET

Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell’utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell’utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.

317336
Questo articolo è stato archiviato. L’articolo, quindi, viene offerto “così come è” e non verrà più aggiornato.
Sommario
In questo articolo viene illustrato come creare un'applicazione console che utilizza il pool di oggetti in Visual Basic .NET. È possibile attivare e disattivare il pool di oggetti per visualizzare il pool di oggetti effetti di un'applicazione che crea molti oggetti costosi.

back to the top

Requisiti

Nell'elenco seguente sono indicati hardware, software, infrastruttura di rete e i service pack è necessario:
  • Microsoft .NET framework
  • Microsoft Windows 2000 Professional, Microsoft Windows 2000 Server, Microsoft Windows XP Professional o server di Microsoft Windows XP
In questo articolo si presume la conoscenza dei seguenti argomenti:
  • Component Object Model (COM) e di Enterprise Services
  • Pool di oggetti
  • Utilizzando gli attributi per estendere i metadati
back to the top

Creare un'applicazione console in Visual Basic .NET

  1. Avviare Microsoft Visual Studio .NET.
  2. Scegliere Nuovo dal menu file , quindi Nuovo progetto .
  3. Nella finestra di dialogo Nuovo progetto , fare clic su Progetti di Visual Basic in Tipi progetto e scegliere Applicazione Console in modelli .
  4. Nella casella di testo nome digitare PoolingDemo e quindi fare clic su OK .
  5. Assicurarsi che sia visibile la finestra Esplora soluzioni. Se Esplora soluzioni non è visibile, premere la combinazione di tasti CTRL + ALT + L.
  6. Attenersi alla seguente procedura per aggiungere un riferimento al componente COM che verrà utilizzato:
    1. In Esplora soluzioni, fare clic con il pulsante destro del mouse su riferimenti e quindi fare clic su Aggiungi riferimento .
    2. Nella scheda .NET , fare clic su System.EnterpriseServices nell'elenco dei componenti disponibili e quindi fare clic su Seleziona . Si noti che System.EnterpriseServices viene visualizzata nell'elenco Componenti selezionati .
    3. Fare clic su OK . Si noti che System.EnterpriseServices viene visualizzata sotto il nodo riferimenti nell'applicazione console.
back to the top

Aggiungere al progetto un Poolable e una classe Non Poolable

  1. Fare clic con il pulsante destro del mouse PoolingDemo in Esplora soluzioni, scegliere Aggiungi , quindi Aggiungi nuovo elemento .
  2. Nella finestra di dialogo Aggiungi nuovo elemento scegliere classe nella casella modelli e scegliere Apri . Class1.vb viene creato per impostazione predefinita e contiene le classi sia raggruppabili in pool e non raggruppabili in pool.
  3. Per accedere ai pool di attributi e i membri di oggetti, aggiungere il codice riportato di seguito all'inizio di Class1.vb:
    Imports System.EnterpriseServices					
  4. Sostituire la dichiarazione di Class1 predefinito con il codice riportato di seguito:
    Public Class Poolable    Sub New()        Threading.Thread.Sleep(500)    End Sub    Public Sub DoSomething()        ' Add method contents here.    End SubEnd Class						
    avviso che il costruttore contiene codice che simula un'operazione costosa.
  5. L'oggetto deve ereditare la classe ServicedComponent controllati Servizi componenti runtime. Aggiungere il seguente codice dopo la dichiarazione di classe:
    Inherits ServicedComponent					
  6. Per rendere questa classe raggruppabili in pool, attenersi alla seguente procedura:
    1. L'attributo ObjectPoolingAttribute , che viene salvato con i metadati del file di classe, contrassegna l'oggetto per il pool in fase di esecuzione. Aggiungere il codice riportato di seguito sopra la dichiarazione di classe per aggiungere l'attributo ObjectPoolingAttribute alla classe:
      <ObjectPooling(MinPoolSize:=0, MaxPoolSize:=1), JustInTimeActivation(True)>  _  							
      Nota : anche se l'attributo JustInTimeActivation non è necessario attivare il pool, si desideri utilizzare questo attributo nella maggior parte dei casi. Poiché è costosa per creare e annullare i componenti, è possibile migliorare notevolmente le prestazioni consentendo a più client riutilizzare le istanze del componente.
    2. Il metodo di ServicedComponent CanBePooled restituisce false per impostazione predefinita. Per ignorare il metodo CanBePooled in modo che il metodo restituisce true , aggiungere il seguente codice:
      Protected Overrides Function CanBePooled() As Boolean        Return True    End Function						
  7. Aggiungere il codice riportato di seguito alla classe non raggruppabili in pool:
    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 SubEnd Class					
back to the top

Modificare Module1.vb per creare più istanze di queste classi

  1. Nella finestra dell'editor di codice, fare clic sulla scheda Module1.vb .
  2. Nella parte superiore del file, aggiungere la seguente istruzione Imports per lo spazio dei nomi EnterpriseServices consentire l'accesso al metodo DisposeObject :
    Imports System.EnterpriseServices						
    il metodo di DisposeOjbect restituisce gli oggetti al pool di oggetti, che consente loro di essere riutilizzato.
  3. Aggiungere la seguente routine 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						
    questo codice consente di impostare un ciclo che crea un'istanza della classe Poolable o il NonPoolable durante ciascuna delle relative 50 iterazioni. Il codice registra l'inizio e fine volte per il ciclo e quindi scrive il numero di oggetti che vengono creati al secondo alla console.
back to the top

Generare un nome sicuro per l'assembly

È necessario generare un nome sicuro per l'assembly che verrà generato il progetto. Senza un nome sicuro, non è possibile utilizzare servizi COM + per registrare l'assembly.

Per generare questo coppia di chiavi crittografiche, utilizzare lo strumento di nome sicuro (Sn.exe), che si trova nella cartella bin in cui è installato .NET Framework Software Development Kit (SDK). Utilizzare la sintassi della riga di comando riportata di seguito per eseguire lo strumento Sn.exe:
sn -k drive letter \ DirectoryToPlaceKey \ KeyName snk
  1. Per aprire un prompt dei comandi di Visual Studio. NET, fare clic su Start , scegliere programmi , scegliere Microsoft Visual Studio. NET , Visual Studio .NET Tools e infine prompt dei comandi di Visual Studio .NET .
  2. Al prompt dei comandi, digitare il seguente comando:
    sn -k drive letter: \ \poolkey.snk Project Root Folder
  3. Premere il tasto INVIO per generare la coppia di chiavi. Visualizzato il seguente messaggio nella finestra di comando:
    Coppia di chiavi scritta in corso...
  4. Per associare l'assembly del progetto di questa chiave, fare doppio clic su AssemblyInfo.vb in Esplora soluzioni. Per impostazione predefinita, Visual Studio .NET include gli attributi dell'assembly in questo file quando si crea un progetto. Aggiungere il codice riportato di seguito all'elenco degli attributi assembly:
    <Assembly: AssemblyKeyFile("..\..\poolkey.snk")>					
back to the top

Completare i listati di codice

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 FunctionEnd ClassPublic Class NonPoolable    Inherits ServicedComponent    Sub New()        ' Simulate an expensive operation.        Threading.Thread.Sleep(500)    End Sub    Public Sub DoSomething()        ' Add method contents here.    End SubEnd Class				
back to the top

Module1.vb

Imports System.EnterpriseServicesModule 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 SubEnd Module				
back to the top

AssemblyInfo.vb

Imports System.ReflectionImports 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.*")>				
back to the top

Verifica del funzionamento

  1. Premere il tasto F5 per eseguire l'applicazione in modalità di debug. Si noti che questo crea istanze della classe NonPoolable .
  2. Attendere circa 25 secondi. Verrà visualizzato il seguente messaggio:
    Creazione di oggetti / secondo = 1.73542243764044
    Nota : numero di creazioni per secondo esatto può variare.
  3. Premere INVIO per uscire dall'applicazione console e tornare a Visual Studio. NET.
  4. Modificare Module1.vb per creare istanze della classe Poolable . Modificare la prima riga la routine Sub Main come segue:
    Dim D As New Poolable()					
  5. Premere F5 per eseguire nuovamente l'applicazione.
  6. Attendere alcuni secondi. Si noti che il seguente messaggio di (o simile) viene visualizzato:
    Creazione di oggetti / secondo = 29.1977213631085
    Nota Il significativo miglioramento delle prestazioni quando si utilizza un oggetto pool.
  7. Premere INVIO per uscire dall'applicazione console e tornare a Visual Studio. NET.
back to the top

Risoluzione dei problemi

Non dimenticare di eseguire l'override CanBePooled . Se si omette questo passaggio, è impossibile pool l'oggetto.

back to the top

RIFERIMENTI

Per ulteriori informazioni su come implementare e distribuire COM + configurata classi utilizzando common language runtime, come per l'accesso contesto dell'oggetto e chiamare il contesto e come gestire riferimenti a oggetti relativi al contesto, vedere il seguente sito Web Microsoft:
COM + Integration: How .NET Enterprise Services È consentono genera applicazioni distribuite
http://msdn.microsoft.com/en-us/library/bb985615.aspx
back to the top

Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 317336 - Ultima revisione: 01/11/2015 04:32:43 - Revisione: 4.4

  • Microsoft .NET Framework Class Libraries 1.0
  • Microsoft Enterprise Services (included with the .NET Framework) 1.0
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • kbnosurvey kbarchive kbmt kbhowtomaster KB317336 KbMtit
Feedback