我使用CS便利类来处理我的SQL查询。 它是基本的,您可以通过指定数据库名称来实例化,并且它一次只能管理一个命令/数据读取器二重奏。
public static void Connect (string DBName)
{
string connectionString =
"Server=serverNaaaaaaaaame;Database="
+ DBName
+ ";Integrated Security=SSPI;";
try
{
if (cnn != null)
cnn.Close ();
cnn = new SqlConnection (connectionString);
cnn.Open ();
}
catch (Exception e)
{
string aaaaaa = e.Message;
}
}
public void Command (string command)
{
try
{
if (drd != null)
drd.Dispose ();
if (cmd != null)
cmd.Dispose ();
cmd = new SqlCommand (command, cnn);
//cmd.CommandTimeout = 300;
drd = cmd.ExecuteReader ();
}
catch (Exception e)
{
string aaaaaa = e.Message;
}
}
照原样,在代码的多线程部分中,我经常会超时。这似乎是由于我的并发连接数量太高。 (如果我在超时时输入debug并尝试在mssqlsms中执行查询,它将挂起,直到停止调试为止。)
有人告诉我要在连接字符串中设置“最大池大小”选项,但是我看不到它会影响什么。
是否更改了我可以插入同一数据库的SqlConnections数量?
它是否更改了我可以一次使用的并发SqlCommand和后续的sqlDataReaders的数量?在同一个SqlConnection上? 还有吗?
我是否必须在所有连接字符串中指定它?
如果该数据库已经在另一个软件中使用了,是否有效果?
答案 0 :(得分:0)
在多线程环境中,推荐的方案是
According MSDN,MaxPoolSize限制了池中的并发连接数(对于每个唯一连接字符串)。
它是否更改了我可以插入到相同的SqlConnections的数量 数据库?
是的,当打开/使用的SqlConnection的计数> MaxPoolSize时,应用程序正在等待,直到将释放池连接为止。
是否更改并发SqlCommand和后续的数量 我可以一次使用sqlDataReaders吗?在同一个SqlConnection上?东西 还有吗?
是的,如上所述,并发连接的数量受MaxPoolSize的限制。 但是,SqlDataReader依赖于SqlConnection,您可以在同一连接上(顺序)使用多个读取器(另请参阅MARS选项以获取多个记录集)。
我是否必须在所有连接字符串中指定它?
通常,您只需要一个用于连接池的连接字符串。否则,您需要管理多个池。
如果该数据库已经在另一个数据库中使用了,是否有任何效果? 软吗?
是的,您的查询将影响DBMS性能,甚至可能会锁定同一数据库中其他应用程序执行的某些处理。 但是,此问题不是多线程特有的。