速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

在 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:151991
用户头像

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

关注

评论

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

惊喜!1行Python代码,瞬间测你工作量,分享一个统计代码行数的神器

程序员晚枫

Python GitHub 开源项目 工作量

平台工程动态 MonthlyNews 2023-7

杨振涛

云原生 研发效能 平台工程 开发者体验 内部开发者平台

中文多模态医学大模型智能分析X光片,实现影像诊断,完成医生问诊多轮对话

汀丶人工智能

人工智能 自然语言处理 计算机视觉 多模态大模型

IoTOS-App v0.6.0 智能诊断、用量/会话记录、批量业务办理、

开源物联卡管理平台-设备管理

物联网平台 IoT 开源软件 国产开源 物联网展

Sprint Boot学习路线2

小万哥

Java spring Spring Cloud Spring Boot 后端

Requests+Etree+BeautifulSoup+Pandas+Path+Pyinstaller应用 | 获取页面指定区域数据存入html、excel文档

Python pandas pyinstaller requests BeautifulSoup

javascript数组基础

timerring

JavaScript

人工智能如何应对 DevOps 监控和可观测性挑战

SEAL安全

人工智能 DevOps 运维

2023-07-31:用r、e、d三种字符,拼出一个回文子串数量等于x的字符串。 1 <= x <= 10^5。 来自百度。

福大大架构师每日一题

福大大架构师每日一题

北岩律师事务所:50000余家客户的选择,全国首家专注大消费领域的精品律所

联营汇聚

在 Amazon DocumentDB 里处理 Decimal128类型数据的解决方案

亚马逊云科技 (Amazon Web Services)

PoseiSwap:通过 RWA 的全新叙事,反哺 Nautilus Chain 生态

威廉META

在Go中使用Arm的SIMD指令

geange

Go 汇编 neon arm64

C++异步编程开源项目Workflow三岁啦 \^0^/

1412

开源项目 异步编程 异步任务编程 workflow C++

MySQL5.7和MySQL8.0的区别是什么?

百度搜索:蓝易云

云计算 Linux 运维 MySQL 5.7 MySQL 8.0

ShareSDK 国外平台登陆返回参数

MobTech袤博科技

前端 App

PoseiSwap:通过 RWA 的全新叙事,反哺 Nautilus Chain 生态

股市老人

时序数据库 TDengine 被帆软纳入数据源,可视化方案多样化

爱倒腾的程序员

数据库

【Linux工具】yum和gdb详细使用教程。

百度搜索:蓝易云

云计算 Linux 运维 yum 云服务器

Squids openGauss | 云上免费openGauss数据库服务

daydayup

Apache IoTDB v1.1.1/v1.1.2 发布|增加 ZSTD 压缩,show variables 增加时间精度

Apache IoTDB

IoTDB Apache IoTDB

配置 Sublime Text4为 C++ 编辑器的方法

梦笔生花

DHorse v1.3.0 发布,基于k8s的发布平台

tiandizhiguai

DevOps k8s

远程控制软件安全吗?一文看懂ToDesk、RayLink、TeamViewer、Splashtop相关安全机制

颜淡慕潇

安全 远程控制 远程桌面工具 ToDesk

PoseiSwap:通过 RWA 的全新叙事,反哺 Nautilus Chain 生态

鳄鱼视界

数字人第一剑,先斩“尹天仇”

脑极体

AI

大会议程正式公布 华为开发者大会看点前瞻

Geek_2d6073

云原生大数据平台CloudEon V1.1.0版本发布!

CloudEon开源

大数据 云原生 容器化

不用再写FlinkSQL了,使用开源XL-LightHouse轻松实现海量数据实时统计

feng

大数据 流式计算 流式大数据统计 流式统计 企业数据化运营

ChatPaper全流程加速科研:论文阅读+润色+优缺点分析与改进建议+审稿回复

汀丶人工智能

人工智能 自然语言处理 nlp chatpaper

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