Visual Basic. NET'te Enterprise Services nesne havuzu nasıl kullanılır

Makale çevirileri Makale çevirileri
Makale numarası: 317336 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

Bu makalede, Visual Basic. NET'te nesne havuzu kullanan bir konsol uygulaması oluşturun gösterilmiştir. Açmak ve çok pahalı bir nesneyi oluşturan uygulama nesne havuzu oluşturmayı nasıl etkilediğini görmek için nesne havuzu açın.

Gereksinimler

Aşağıdaki listede, gereksinim duyacağınız donanım, yazılım, ağ altyapısı ve hizmet paketleri önerilmektedir:
  • Microsoft .NET framework
  • Microsoft Windows 2000 Professional, Microsoft Windows 2000 Server, Microsoft Windows XP Professional veya Microsoft Windows XP Server
Bu makalede, aşağıdaki konularda bilgi sahibi olduğunuz varsayılmaktadır:
  • Bileşen Nesne Modeli (COM) ve Enterprise Services
  • Havuzu nesnesi
  • Meta verileri genişletmek için öznitelikleri kullanma

Visual Basic. NET'te bir konsol uygulaması oluşturun

  1. Microsoft Visual Studio .NET'i başlatın.
  2. Dosya menüsünde, Yeni ' nin üzerine gelin ve sonra da New Project ' i tıklatın.
  3. Yeni proje) iletişim kutusunda, Project Types altında Visual Basic Projects ' ı tıklatın ve şablonları altında Console Application ' ı tıklatın.
  4. Adı metin kutusuna, PoolingDemo yazın ve Tamam ' ı tıklatın.
  5. Solution Explorer (Çözüm Gezgini) penceresinde görünür olduğundan emin olun. Solution Explorer görünmüyorsa, CTRL + ALT + N tuş birleşimine basın.
  6. Kullanacağınız bir COM bileşeni için bir başvuru eklemek için şu adımları izleyin:
    1. Solution Explorer'da (Çözüm Gezgini), Başvurular ' ı sağ tıklatın ve sonra Add Reference</a1>'ı tıklatın.
    2. .NET sekmesinde System.EnterpriseServices'ı kullanılabilir bileşenler listesinde tıklatın ve sonra da <a2>Seç</a2>'i tıklatın. Seçili bileşenler listesinde System.EnterpriseServices'ı görüntülendiğine dikkat edin.
    3. Tamam ' ı tıklatın. System.EnterpriseServices'ı konsol uygulaması <a1>Başvurular</a1> düğümündeki görüntülendiğine dikkat edin.

Bir havuza ve havuza olmayan bir sınıf projeye ekleyin

  1. Ekle işaret PoolingDemo Solution Explorer'da (Çözüm Gezgini) sağ tıklatın ve sonra Yeni Öğe Ekle'yi tıklatın.
  2. Yeni Öğe Ekle iletişim kutusundaki Şablonlar altında sınıf ' ı tıklatın ve sonra ' ı tıklatın. Class1.vb, varsayılan olarak oluşturulur ve havuza ve havuza olmayan sınıflarını içerir.
  3. Nesne özniteliklerini ve üyeleri havuzu erişmek için <a0></a0>, aşağıdaki kodu Class1.vb en üstüne ekleyin:
    Imports System.EnterpriseServices
    					
  4. Varsayılan Class1 bildirimi aşağıdaki kodla değiştirin:
    Public Class Poolable
        Sub New()
            Threading.Thread.Sleep(500)
        End Sub
        Public Sub DoSomething()
            ' Add method contents here.
        End Sub
    End Class
    						
    bildirimi kurucu, pahalı bir işlem taklit eden kodu içerir.
  5. Nesne için Bile?en Hizmetleri'nin denetimi altında ServicedComponent sınıfı devralınmalıdır çal??ma zaman?. Sınıf bildirimi sonra aşağıdaki kodu ekleyin:
    Inherits ServicedComponent
    					
  6. Bu sınıf, havuza yapmak için şu adımları izleyin:
    1. Sınıf dosyanın meta verilerini kaydedilen ObjectPoolingAttribute öznitelik nesnesi, çalıştırma sırasında havuzu için işaretler. Yukarıdaki sınıf bildirimi ObjectPoolingAttribute özniteliği sınıfa eklemek için aşağıdaki kodu ekleyin:
      <ObjectPooling(MinPoolSize:=0, MaxPoolSize:=1), JustInTimeActivation(True)>  _  
      							
      Not: JustInTimeActivation özniteliği havuzunu etkinleştirmek için gerekli değildir, ancak çoğu durumda bu öznitelik kullanmak isteyebilirsiniz. Oluşturmak ve bileşenleri atmak için ucuz olduğundan, bileşen örnekleri yeniden kullanmak birden çok istemciye vererek performansı önemli ölçüde artırabilirsiniz.
    2. Varsayılan olarak yanlışCanBePooledServicedComponent yöntem döndürür. Böylece yöntemi true değerini CanBePooled yöntemi geçersiz kılmak için <a0></a0>, aşağıdaki kodu ekleyin:
      Protected Overrides Function CanBePooled() As Boolean
              Return True
          End Function
      						
  7. Havuza olmayan bir sınıfa aşağıdaki kodu ekleyin:
    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
    					

Bu sınıftan birden çok kopyalarını oluşturmak için Module1.vb değiştirme

  1. Kod Düzenleyicisi penceresinde Module1.vb sekmesini tıklatın.
  2. Dosyayı üstündeki ad alanı EnterpriseServicesDisposeObject yöntemi erişimine izin vermek için aşağıdaki ımports deyimine:
    Imports System.EnterpriseServices
    						
    DisposeOjbect yöntem nesneleri yeniden veren nesne havuzu döndürür.
  3. Sub Main aşağıdaki yordamı ekleyin:
    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
    						
    bu kod bir döngü her 50, yineleme sırasında NonPoolable veya Poolable sınıfın örneğini oluşturan ayarlar. Başlangıç kodu kaydeder ve sonuna döngü için zaman ve daha sonra konsola saniyede oluşturulan nesne sayısını yazar.

Derleme için kesin ad oluştur

Bu projeyi oluşturan derlemesinin kesin adı oluşturmanız gerekir. Kesin adı, COM + Hizmetleri, bu derleme kaydetmek için kullanamazsınız.

Bu şifreleme anahtar çiftini üretmek için <a0></a0>, .NET Framework Software Development Kit'e (SDK) yüklü olduğu bir depo gözü klasöründe bulunan güçlü adı (Sn.exe) aracı, Ek Yardım düğmesini kullanın. Sn.exe aracı çalıştırmak için aşağıdaki komut satırı sözdizimini kullanın:
sn -k drive letter \ DirectoryToPlaceKey \ KeyName .snk
  1. Visual Studio. NET'in komut istemini açmak için <a0></a0>, Başlat ' ı tıklatın, Programlar ' ın üzerine gelin, Visual Studio.NET ' i işaretleyin, Visual Studio .NET araçları ' nın üzerine gelin ve Visual Studio .NET komut istemi ' ni tıklatın.
  2. Komut istemine aşağıdaki komutu yazın:
    sn -k drive letter: \ Project Root Folder \poolkey.snk
  3. Anahtar çiftini üretmek için ENTER tuşuna basın. Aşağıdaki ileti'nin komut penceresinde görüntülendiğine dikkat edin:
    Yazılan anahtar çifti...
  4. Bu anahtar projenin derlemesi ile ilişkilendirmek için <a0></a0>, AssemblyInfo.vb Solution Explorer'da (Çözüm Gezgini) çift tıklatın. Bir proje oluşturduğunuzda, varsayılan olarak, bu dosyayı Visual Studio. NET'in Derleme öznitelikleri içerir. Bu derleme öznitelikleri listesine aşağıdaki kodu ekleyin:
    <Assembly: AssemblyKeyFile("..\..\poolkey.snk")>
    					

Tam kod dökümleri

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

It Works That doğrulayın.

  1. Uygulama hata ayıklama modunda çalıştırmak için F5 tuşuna basın. Bu <a0>NonPoolable</a0> sınıfının örneklerini oluşturur dikkat edin.
  2. Yaklaşık 25 saniye bekleyin. Aşağıdaki iletiyi görüntülendiğine dikkat edin:
    Oluşturma sayısı nesne / ikinci 1.73542243764044 =
    Not: saniyedeki oluşturma tam sayısı değişebilir.
  3. Konsol uygulamadan çıkın ve Visual Studio. NET'in dönmek için ENTER'E basın.
  4. Module1.vb Poolable sınıfı yaratmak için değiştirin. Sub Main</a0> yordamı ilk satırın aşağıdaki gibi değişir:
    Dim D As New Poolable()
    					
  5. Uygulamayı yeniden çalıştırmak için F5 tuşuna basın.
  6. Birkaç saniye bekleyin. Fark (veya benzer) aşağıdaki ileti görüntülenir:
    Oluşturma sayısı nesne / ikinci 29.1977213631085 =
    Nesne kullandığınızda performans önemli olan geliştirme Not havuzu.
  7. Konsol uygulamadan çıkın ve Visual Studio. NET'in dönmek için ENTER'E basın.

SORUN GİDERME

CanBePooled geçersiz kılmak unut değil. Bu adımı atlarsanız, nesne havuzu edemiyor.

Başvurular

Uygulamak ve dağıtmak hakkında daha fazla bilgi için COM + sınıfları kullanarak ortak dil çalışma zamanı, nesne bağlamı erişmek ve içeriği arama ve içerik bağlı nesne başvurularını yönetmek için aşağıdaki Microsoft Web sitesine başvurun yapılandırdınız:
COM + ıntegration: Uygulamaları, .NET Enterprise Services yardımcı olabilir, nasıl Build Dağıtılmış
http://msdn.microsoft.com/en-us/library/bb985615.aspx

Özellikler

Makale numarası: 317336 - Last Review: 15 Temmuz 2004 Perşembe - Gözden geçirme: 4.4
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft .NET Framework Class Libraries 1.0
  • Microsoft Enterprise Services (included with the .NET Framework) 1.0
  • Microsoft Visual Basic .NET 2002 Standard Edition
Anahtar Kelimeler: 
kbmt kbhowtomaster KB317336 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:317336

Geri Bildirim Ver

 

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