我有动态仪表板,每3秒从oracle到c#winforms获得20个查询。
目前我使用如下;
OracleConnection con = new OracleConnection(oradb);
con.Open();
OracleCommand cmd1 = new OracleCommand(getSystime, con);
OracleDataReader dr1 = cmd1.ExecuteReader();
dr1.Read();
.
.
.
.
.
.
OracleCommand cmd15 = new OracleCommand(getSqltime, con);
OracleDataReader dr15 = cmd15.ExecuteReader();
dr15.Read();
con.Dispose();
con.Close();
目前,当我检查时,该应用程序有9个非活动会话,并且有近100个打开的游标。数字没有增加。即使我在1小时后检查,我的应用程序中有9个活动/非活动和几乎100个open_cursor。
这将是我的第一个申请,因此我没有任何经验。
我怎么解释它?
答案 0 :(得分:2)
阅读完内容后,您应始终Close()
OracleDataReader
。并在using {}
实施IDisposable
using ( OracleConnection con = new OracleConnection(oradb) ) {
con.Open();
OracleCommand cmd1 = new OracleCommand(getSystime, con);
using ( OracleDataReader dr1 = cmd1.ExecuteReader() ) {
dr1.Read();
...
dr1.Close();
}
}
答案 1 :(得分:0)
不确定我理解你的问题但是 尝试使用
OracleDataAdapter
而不是
OracleDataReader
我的理解是DataReader比DataAdapter更快,但DataReader在连接模式下工作。 DataAdapter / DataSet在断开连接模式下工作。
这可能是您在一段时间后未收到查询的原因。