You experience high memory usage when using EnlistDurable

This article helps you resolve the problem where the managed heap in your .NET application experiences high memory consumption when you use System.Transactions.Transaction.EnlistDurable.

Original product version:   Microsoft .NET Framework 4.5
Original KB number:   2859968

Symptoms

The managed heap in your .NET application is experiencing high memory consumption and you're using System.Transactions.Transaction.EnlistDurable. You'll also see a large number of instances of the OletxResourceManager class on the managed heap.

Cause

You're using a different Guid for the Resource Manager identifier parameter for each call to System.Transactions.Transaction.EnlistDurable.

Resolution

Use the same Guid for all calls to EnlistDurable.

More information

Typically this Resource Manager identifier Guid is associated with the durable storage (the log) maintained by the Resource Manager and only a single Guid is used for all calls to EnlistDurable within an AppDomain. In other words, all EnlistDurable calls within an AppDomain are for the same Resource Manager. If a Resource Manager uses more than one Guid per AppDomain, the Resource Manager is required to drive recovery of transactions for all those different Resource Manager identifiers. There's also a performance cost if the transaction gets promoted to become a Microsoft Distributed Transaction Coordinator (MSDTC) transaction because each unique Resource Manager identifier that has enlisted in the transaction must have an associated Resource Manager object registered with MSDTC and that object is kept in anticipation of future EnlistDurable calls using the same identifier.