Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 异步使用ODP.NET_C#_.net_Oracle_Multithreading_Odp.net - Fatal编程技术网

C# 异步使用ODP.NET

C# 异步使用ODP.NET,c#,.net,oracle,multithreading,odp.net,C#,.net,Oracle,Multithreading,Odp.net,干草, 我的系统需要使用相同的连接(异步)执行几个主要的SQL(在Oracle DB上) 这个问题的最佳做法是什么? 1.打开单个连接并在不同的线程上执行每个SQL语句(它是线程安全的吗?) 2.为每个SQL语句创建新连接并“打开+关闭” 谢谢, Hec我们已经在多个线程上调用了Oracle SQL语句,如果您的数据库能够处理负载并且不会成为瓶颈,那么这可能是最好的。但是,我认为您需要在将发出SQL命令的线程上创建连接。您还可以(而且可能应该)使用连接池,这样您的连接将被重用,而不是重新建立(O

干草, 我的系统需要使用相同的连接(异步)执行几个主要的SQL(在Oracle DB上)

这个问题的最佳做法是什么? 1.打开单个连接并在不同的线程上执行每个SQL语句(它是线程安全的吗?) 2.为每个SQL语句创建新连接并“打开+关闭”

谢谢,
Hec

我们已经在多个线程上调用了Oracle SQL语句,如果您的数据库能够处理负载并且不会成为瓶颈,那么这可能是最好的。但是,我认为您需要在将发出SQL命令的线程上创建连接。您还可以(而且可能应该)使用连接池,这样您的连接将被重用,而不是重新建立(Oracle似乎可以从一个线程到另一个线程重新使用这些连接)。

使用“连接池”是什么意思?ODP.NET内置了连接池(我只需要在连接字符串上配置它)。是吗?是的,这就是我指的连接池。(对我来说)有点出乎意料的是,ODP.NET强迫我打开要使用它的线程中的每个连接,但它本身会跨线程重用连接(在它自己的连接池中)。但是我想这是为了帮助确保客户端代码的线程安全而强制执行的。顺便说一下,目前我只使用一个连接,并将其传递给所有线程,它工作得很好。。。无论如何,我认为最好在每个线程上打开连接并“关闭”它。谢谢你的回答!