Основное правило заключается в том, что транзакционный ресурс (например, БД, очередь, механизм обмена сообщениями, файловая система и т. Д.) Выберет самого дешевого и самого легкого координатора транзакций (TC), о котором он знает.
MSDTC (или сторонняя альтернатива) обычно вызывается, только когда транзакции охватывают несколько физических блоков (для этого требуется распределенный TC-DTC) или если они охватывают несколько ресурсов, один из которых понимает только MSDTC.
Для транзакций, выполняемых исключительно внутри определенного серверного приложения, есть вероятность, что они будут использовать свой собственный внутренний TC или использовать самый дешевый TC, доступный на платформе, на которой они работают.
Vista / Server2008 представила Kernel Transaction Monitor (KTM), который обеспечивает очень быстрый встроенный TC. System.Transactions будет использовать KTM, если доступно, но если нет (например, при работе на XP / Server2003), вызовет MSDTC.
KTM позволяет, например, обновлять БД, некоторые (NTFS) файлы и очередь MSMQ, которые все находятся в одном физическом блоке, не требуя (более дорогой) распределенной транзакции.
Увы, некоторые старые программы не знают о KTM и могут вызывать MSDTC, когда участвуют в транзакции за пределами своей локальной области.