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

Traduzione articoli Traduzione articoli
Identificativo articolo: 317336 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

In questa pagina

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.

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

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.

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 Sub
    End 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 Sub
    End Class
    					

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.

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

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

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.

Risoluzione dei problemi

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

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

Proprietà

Identificativo articolo: 317336 - Ultima modifica: giovedì 15 luglio 2004 - Revisione: 4.4
Le informazioni in questo articolo si applicano 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
Chiavi: 
kbmt kbhowtomaster KB317336 KbMtit
Traduzione automatica articoli
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.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 317336
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

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