Hohe Speicherauslastung bei Verwendung von EnlistDurable

Dieser Artikel hilft Ihnen, das Problem zu beheben, bei dem der verwaltete Heap in Ihrer .NET-Anwendung bei der Verwendung einen hohen Speicherverbrauch System.Transactions.Transaction.EnlistDurable hat.

Ursprüngliche Produktversion:   Microsoft .NET Framework 4.5
Ursprüngliche KB-Nummer:   2859968

Problembeschreibung

Der verwaltete Heap in Ihrer .NET-Anwendung ist mit hohem Speicherverbrauch konfrontiert, und Sie verwenden System.Transactions.Transaction.EnlistDurable . Außerdem wird eine große Anzahl von Instanzen der OletxResourceManager Klasse auf dem verwalteten Heap angezeigt.

Ursache

Sie verwenden eine andere GUID für den Resource Manager-Bezeichnerparameter für jeden Aufruf von System.Transactions.Transaction.EnlistDurable .

Lösung

Verwenden Sie die gleiche GUID für alle Aufrufe an EnlistDurable .

Weitere Informationen

In der Regel ist diese Resource Manager-BEzeichner-GUID dem dauerhaften Speicher (dem Protokoll) zugeordnet, der vom Ressourcen-Manager verwaltet wird, und nur eine einzelne GUID wird für alle Aufrufe EnlistDurable innerhalb einer AppDomain verwendet. Anders ausgedrückt: Alle Aufrufe innerhalb eines Elements EnlistDurable beziehen sich auf AppDomain denselben Ressourcen-Manager. Wenn ein Ressourcen-Manager mehr als eine Guid pro AppDomain verwendet, ist der Ressourcen-Manager erforderlich, um die Wiederherstellung von Transaktionen für alle diese verschiedenen Ressourcen-Manager-Bezeichner zu steuern. Es gibt auch Leistungseinbußen, wenn die Transaktion höhergestuft wird, um eine Microsoft Distributed Transaction Coordinator (MSDTC)-Transaktion zu werden, da jeder eindeutige Resource Manager-Bezeichner, der in die Transaktion eingetragen wurde, über ein zugeordnetes Resource Manager-Objekt verfügen muss, das bei MSDTC registriert ist und dieses Objekt in Erwartung zukünftiger EnlistDurable Aufrufe mit demselben Bezeichner beibehalten wird.