gpt4 book ai didi

msmq - 为什么这个简单的 MSMQ 事务会升级为 DTC?

转载 作者:行者123 更新时间:2023-12-02 00:35:23 24 4
gpt4 key购买 nike

我已将遇到的问题简化为以下示例代码:

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 可能是一个因素。无论如何,我只是想了解原因。

如有任何帮助,我们将不胜感激。

最佳答案

来自http://geekswithblogs.net/dotnetrodent/archive/2008/04/16/121279.aspx

If you only need to do transactional work related to message queues, without any other resources that need to be in the transactional context (like databases), don’t use the TransactionScope, but rather the MessageQueueTransaction class. Using this class to control transactions related only to message queues comes with a lesser performance penalty than using a full distributed transaction controlled by DTC.

关于msmq - 为什么这个简单的 MSMQ 事务会升级为 DTC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12462321/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com