我已经减少了以下示例代码所面临的问题:
var inQueue = ".\private$\testqueue";
using (var ts = new TransactionScope())
{
using (var q = new MessageQueue(inQueue, QueueAccessMode.Send))
{
for (var i = 0; i < 100000; ++i)
{
var msg = new Message(i);
q.Send(msg, MessageQueueTransactionType.Automatic);
}
}
ts.Complete();
}
如您所见,它使用 TransactionScope 模式将 100,000 个整数写入(事务性、本地)队列。我的理解是这种类型的操作不会升级为 DTC 交易。
但是,如果我在运行时打开组件服务,我可以在本地 DTC > 事务列表中看到该事务。这意味着交易已经升级,对吧?
为什么会发生这种情况?我被另一个程序中的糟糕性能提示了这一点,并且似乎将 DTC 用于这样一个简单的事务可能是一个因素。无论如何,我只是想了解原因。
任何帮助,将不胜感激。