当我从 ODP.NET 运行查询时,我在 V$SQL 中看到,对于每个调用,它都会执行一个 PARSE_CALL。看:
select
s.FETCHES,s.PARSE_CALLS,s.sql_Text,s.sql_id
from v$sql s where
sql_Text = 'select 1 from dual /*test2*/'
回报:
即使我重用了相同的 OracleCommand 并调用了 Prepare。
这是我的 .NET 代码:
using (var c = connection.CreateCommand())
{
c.CommandText = "select 1 from dual /*test2*/";
c.Prepare();
for (int i = 0; i < 9000; i++)
{
using (var r = c.ExecuteReader())
{
r.Read();
}
}
}
如何减少 Parse_Calls 的数量?有没有办法让 Oracle 为所有这些重复执行保留服务器端光标,并在我处理命令时处理它?
我正在使用 Oracle.ManagedDataAccess.dll 版本 4.122.1.20170624