Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Objektpooling ist ein COM+-Dienst, der den Aufwand beim Erstellen neuer Objekte reduziert, da diese nicht mehr vollständig neu erstellt werden müssen. Wird ein Objekt aktiviert, wird es aus dem Pool herausgenommen. Wird das Objekt deaktiviert, gelangt es wieder zurück in den Pool und verbleibt dort solange, bis die nächste Anforderung erfolgt.
Das Objektpooling kann konfiguriert werden, indem das ObjectPoolingAttribute-Attribut auf eine von der System.EnterpriseServices.ServicedComponent-Klasse abgeleitete Klasse angewendet wird.
Im Gegensatz zum Verbindungspooling wird beim Objektpooling statt der maximal möglichen Anzahl die der aktiven Verbindungen überwacht. Im Folgenden finden Sie die wichtigsten Unterschiede zwischen Objektpooling und Verbindungspooling:
- Erstellung. Bei der Verwendung von Verbindungspooling wird die Erstellung im gleichen Thread vorgenommen. Falls der Pool leer ist, müssen Sie die Verbindung selbst aufbauen. Beim Objektpooling wird durch den Pool entschieden, ob ein neues Objekt erstellt wird. Wenn das Maximum schon erreicht wurde, wird stattdessen das nächste verfügbare Objekt verwendet. Dieses Verhalten ist entscheidend, wenn das Erstellen eines Objekts viel Zeit erfordert, das Objekt aber nur kurz verwendet wird.
- Erzwingen von Minimal- und Maximalwerten. Diese Funktion wird beim Verbindungspooling nicht ausgeführt. Der Maximalwert beim Objektpooling ist von besonderer Bedeutung, wenn eine Anwendung skaliert werden soll. Dies kann z. B. der Fall sein, wenn Tausende von Anfragen für nur wenige Objekte gebündelt werden müssen. (TPC/C-Vergleichstests setzen das voraus.)
Das COM+-Objektpooling ist im Prinzip identisch mit dem verwalteten SQL Client-Verbindungspooling, das unter .NET Framework verwendet wird. Beispielsweise erfolgt die Erstellung in einem anderen Thread, und Minima und Maxima werden erzwungen.
**Hinweis **Anwendungsdomänen beeinflussen das Verhalten des Objektpoolings. Wenn unter Microsoft Windows 2000 die Anwendungsaktivierung auf Library festgelegt ist und mehrere Anwendungsdomänen vorhanden sind, werden alle Objekte im Objektpool in der Standardanwendungsdomäne erstellt und von mehreren Clients gemeinsam verwendet. Unter Microsoft Windows XP und Windows Server 2003 ist in der gleichen Situation für jede Anwendungsdomäne ein eigener Objektpool vorhanden. Wenn eines dieser Betriebssysteme mit mehreren Anwendungsdomänen verwendet und die Anwendungsaktivierung vom Server aus gestartet wird, verwenden Clients außerhalb des Prozesses den Objektpool der Standardanwendungsdomäne.
Im folgenden Beispiel werden in der TestObjectPooling-Klasse Größe und Timeoutbegrenzungen festgelegt:
<ObjectPooling(MinPoolSize := 2, MaxPoolSize := 5, _
CreationTimeout := 20000)> _
Public Class TestObjectPooling
Inherits ServicedComponent
Public Sub Perform ()
' Method contents go here.
End Sub
Public Overrides Sub Activate()
' Called when removed from the pool.
End Sub
Public Overrides Sub Deactivate()
' Called before deactivating or placing back in pool.
End Sub
Public Overrides Function CanBePooled() As Boolean
' Called after Deactivate. Indicate your vote here.
Return True
End Function
End Class
[C#]
[ObjectPooling(Enabled=true, MinPoolSize=2, MaxPoolSize=5, CreationTimeOut=20000)]
public class TestObjectPooling : ServicedComponent
{
public void Perform ()
{
// Method contents go here.
}
public override void Activate()
{
// Called when removed from the pool.
}
public override void Deactivate()
{
// Called before deactivating or placing back in pool.
}
public override bool CanBePooled()
{
// Called after Deactivate. Indicate your vote here.
return true;
}
}
Client
Public Class App
Overloads Public Shared Sub Main(args() As String)
Dim order As New TestObjectPooling()
order.Perform()
' To return the object to the object pool, use DisposeObject.
' This returns the object to the pool and allows it to be reused.
' If this call is not made, the garbage collector returns it to the pool
' in a non-deterministic fashion, which hinders performance
' of an application that depends on object pooling to conserve
' expensive resources.
ServicedComponent.DisposeObject (order)
End Sub
End Class
[C#]
public class App
{
public static int Main(string[] args)
{
TestObjectPooling order = new TestObjectPooling();
order.Perform();
/* To return the object to the object pool, use DisposeObject.
This returns the object to the pool and allows it to be reused.
If this call is not made, the garbage collector returns it to the pool
in a non-deterministic fashion, which hinders performance
of an application that depends on object pooling to conserve
expensive resources. */
ServicedComponent.DisposeObject (order);
}
}
**Hinweis **Im Allgemeinen müssen Sie bei der Verwendung von Serviced Components DisposeObject nicht über den Client aufrufen. Das ist allerdings erforderlich, wenn Sie den COM+-Dienst Objektpooling ohne JIT-Aktivierung (Just-in-Time) verwenden. In diesem Fall muss COM+ über die Beendigung der Arbeit mit dem Objekt benachrichtigt werden. Damit wird bestätigt, dass es sicher ist, das Objekt in den Pool zurückzugeben. Wenn Sie zu einem Zeitpunkt jeweils nur ein Objekt im Objektpool aufrufen möchten, sollten Sie die JIT-Aktivierung beim Objektpooling verwenden. Wenn Sie einen Verweis erhalten und diesen mehrfach aufrufen möchten, führt Objektpooling ohne JIT-Aktivierung zu einer besseren Leistung.
Siehe auch
Zusammenfassung verfügbarer COM+-Dienste | ObjectPoolingAttribute | System.EnterpriseServices-Namespace