项目需要批量导入数据,用c++写了个程序,调用c#的Webservice接口
但只要导入工作开始,oracle会话里,马上就出现几十个w3wp.exe占用的会话(状态又是inactive),
oracle会话一会就达到上限了,影响系统
WebServcice接口方法就是 调用ExecuteNonQuery直接插入数据库,没什么问题
如重启iis,inactive的会话就没有了
不知道为啥?
高手们帮分析分析
注:服务器Windows 2008
我觉得应该是数据库连接池的原因
为什么说“Oracle会话一会就达到上限了,影响系统”?
oracle有数量限制,这些inactive会话太多,其他需要连接、操作数据库,就没有会话了
想是不是iis设置问题,不过找了半天没发现
@Bryant: 在连接字串设置一下Max Pool Size
@dudu:
非常感谢dudu,不过还是没有不行,为啥oracle会话都inactive了,iis还不释放呢?
会不户是iis里面有吗问题
@Bryant: 与IIS无关,ExecuteNonQuery之后立即关闭数据库连接了吗?
@dudu:
查看oracle会话,好几十个w3wp.exe 进程占用的,重启下iis,这些会话都没有了。
ExecuteNonQuery这样写的,帮分析下
public static int ExecuteNonQuery(String cmdText, params OracleParameter[] commandParameters)
{
OracleCommand cmd = new OracleCommand();
int val = 0;
using (OracleConnection connection = new OracleConnection(OracleConnectionString))
{
PrepareCommand(cmd, connection, null, CommandType.Text, cmdText, commandParameters);
val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
}
return val;
}
@Bryant: 在连接字符串中加上 Pooling=false; 关闭连接池,看还有没有这么多w3wp进程占用Oracle会话
@dudu: thx,试试,再来汇报成果
w3wp.exe 这个进程跟 oracle一点的关系都没有啊
w3wp.exe 是调用部署在iis的webservice产生的
这个接口里又调用了oracle
谢谢@dudu、@chenping2008的帮忙,原因是网上down的OracleHelper里面有个方法写的有问题
不过没有分了。
LZ你好,我也是遇到这样的问题,想请问你说的“方法”有问题指的是什么?能不能给我点帮助?