Data+AI时代,如何打造下一代数智平台? 了解详情
写点什么

在 TransactionScope 中优先使用 Oracle 的.NET 驱动

  • 2007-12-31
  • 本文字数:1337 字

    阅读完需:约 4 分钟

分布式事务(DTx:Distributed Transaction)一直是大型应用所需的必要特性,由于需要同时协调不同的数据源(例如:数据库、队列、甚至注册表和新一代操作系统的 I/O),因此启动 DTx 的代价相对较大,而且很多中间件服务器的 DTx 协调器与应用位于不同的进程中,因此对于频繁提交的 OLTP 操作而言性能影响较大。

.NET Framework 2.0 开始默认提供 ORACLE 的 ADO.NET 驱动,虽然也支持通过 TransactionScope 隐式启动 DTx,但却采用应用宿主进程外的 dllhost.exe 作为独立的 DTx 协调器(DTC)。ORACLE 在自己的 ADO.NET 驱动中对该问题进行了显著优化,不仅对反复打开的连接提供了默认的连接池引用重定向,而且把 DTx 的协调工作置于.NET CLR 与应用宿主内部,对于大型应用而言可以有效的减少因跨多进程协调引发的性能损失。

下面的示例代码采用 ORACLE 的 ADO.NET 驱动(using Oracle.DataAccess.Client)运行,从 COM+ 的统计看并不会引起 DTC 调用,而如果换成微软的 ORACLE ADO.NET 驱动(using System.Data.OracleClient),就需要启动昂贵的 DTC 服务。

private const string ConnectionString = “Data Source = localhost:1521/XE; User ID = scott; Password = tiger”;
private const string SqlConnectionString = “Data Source = (local); Initial Catalog = Northwind; Integrated Security = SSPI”;
[TestMethod]
public void TestOracleDriver()
{
using (TransactionScope scope = new TransactionScope())
{
Oracle.DataAccess.Client.OracleConnection connection = new Oracle.DataAccess.Client.OracleConnection(ConnectionString);
connection.Open();
Oracle.DataAccess.Client.OracleCommand command = connection.CreateCommand();
command.CommandText = “UPDATE DEPT SET DNAME = DNAME”;
command.CommandType = CommandType.Text;
command.ExecuteNonQuery();
// 为了模拟一个分布式数据的操作,下面还增加了一段 SqlConnection 的 DML 操作。
SqlConnection sqlC = new SqlConnection(SqlConnectionString);
sqlC.Open();
SqlCommand sComm = sqlC.CreateCommand();
sComm.CommandText = “UPDATE Products SET ProductName = ProductName”;
sComm.CommandType = CommandType.Text;
sComm.ExecuteNonQuery();
scope.Complete();
}
}

[TestMethod]

public void TestMicrosoftDriver()
{
using (TransactionScope scope = new TransactionScope())
{
System.Data.OracleClient.OracleConnection connection = new System.Data.OracleClient.OracleConnection(ConnectionString);
connection.Open();
System.Data.OracleClient.OracleCommand command = connection.CreateCommand();
command.CommandText = “UPDATE DEPT SET DNAME = DNAME”;
command.CommandType = CommandType.Text;
command.ExecuteNonQuery();
// 为了模拟一个分布式数据的操作,下面还增加了一段 SqlConnection 的 DML 操作。
SqlConnection sqlC = new SqlConnection(SqlConnectionString);
sqlC.Open();
SqlCommand sComm = sqlC.CreateCommand();
sComm.CommandText = “UPDATE Products SET ProductName = ProductName”;
sComm.CommandType = CommandType.Text;
sComm.ExecuteNonQuery();
scope.Complete();
}
}

2007-12-31 21:152255
用户头像

发布了 61 篇内容, 共 12.9 次阅读, 收获喜欢 0 次。

关注

评论

发布
暂无评论
发现更多内容

鸢尾花数据多维分布探索与可视化实践|AI 编程社知识库精选

火山引擎开发者社区

AI

Harmony OS Next手势组合全攻略!三种模式玩转交互设计

Turing_010

MacCleaner Pro:一键清理,让你的Mac快如新机!

Rose

F5深化与Red Hat战略合作 ,赋能企业AI规模化安全部署

科技热闻

天润融通“业务专家+AI员工”模式,重塑企业组织形态

天润融通

等保一体机

等保测评

我们又来啦 又又上架了一个鸿蒙项目-萤火故事屋

万少

鸿蒙 HarmonyOS HarmonyOS NEXT

从System 1到System 2:AI推理能力演化的范式分析

申公豹

人工智能「

2025Java面试八股②(含121道面试题和答案)

王中阳Go

Java 面试题

Project Office X Pro:让复杂项目规划变得像拖拽一样简单

Rose

Wolfram Mathematica:从微积分到AI,一个工具搞定所有数学问题

Rose

AI口语练习APP的技术难点

北京木奇移动技术有限公司

软件外包公司 AI口语练习 AI英语学习

Sentieon 项目文章 | 长读长基因组测序在神经发育障碍分子诊断中的应用

INSVAST

长读长测序 Sentieon 精准医疗 分子诊断 神经发育障碍

清华大学超百门课程已实现AI赋能教学,指导发布AI通识教育白皮书

ModelWhale

白皮书 清华大学 AI通识教育 AI赋能教学

得物研发自测 & 前端自动化测试体系建设

得物技术

自动化

AI口语练习APP的运营

北京木奇移动技术有限公司

软件外包公司 AI口语练习

SVN管理工具Cornerstone入门教程

Rose

赛博威产品创新协同平台:全面赋能企业创新流程,打造卓越产品力

赛博威科技

人工智能 产品创新 赛博威 产品创新协同平台

APMPlus × veFaaS 一键开启函数服务性能监控,让函数运行全程可观测

火山引擎开发者社区

火山引擎

云服务器

等保测评

签约快讯|天润融通签约开迈斯

天润融通

立即体验|效果好、低延迟,Trae 已支持 Doubao-1.5-thinking-pro 新模型

火山引擎开发者社区

豆包 Trae

Macs Fan Control Pro:精准掌控风扇,告别过热降频!

Rose

荣誉|奇点云入选2025年度浙商“AI+”TOP100

奇点云

AI

2025 社交电商必看!带商城的论坛圈子源码,藏着「用户边聊边买」的 5 层变现架构

DUOKE七七

MySQL uniapp thinkphp

医学AI人才培养,上交医学院的两条路径!清华领衔发布AI白皮书

ModelWhale

清华大学 上交医学院 医学AI

线上Java服务总崩溃?用JProfiler提前发现性能隐患!

Rose

Lighthouse 评估与调试能力全面升级!

塞讯科技

运维 可观测性 LLM可观测

TickIt:基于 LLM 的自动化 Oncall 升级

火山引擎开发者社区

软件工程 TickIt

昇腾训练建链超时定位策略

AI布道Mr.Jin

平台简化玩法,提效提质成为关键——2025年“618”大促第一周期观察

易观分析

在TransactionScope中优先使用Oracle的.NET驱动_.NET_王翔_InfoQ精选文章