我有一个C程序使用SQLExecDirect
调用SQL Server存储过程。
存储过程本身不执行任何SQL,只是映射参数和调用sp_getapplock
。但是,当运行多次时,这种情况的表现很慢。
我有1000个这样的循环,并且使用时间,看到每20个中的1个花费大约15/16毫秒,而其他呼叫几乎没有任何时间注册。我尝试过SQLPrepare
,SQLExecute
,将驱动程序更改为Native等,没有任何区别。我甚至转到SQL Server 2016尝试将存储过程编译为本机,但不能调用sp_getapplock
来编译。
我已经在存储过程中注释了sp_getapplock
调用本身而没有改变性能(在这种情况下它只是做了几个SET)所以我认为问题必须在ODBC调用端。
伪代码:
static sql_handle = null;
if (sql_handle == null)
{
SQLAllocStmt(..)
}
SQLBindParameter(..)
SQLBindParameter(..)
SQLExecDirect(handle, "{? = call MYSTOREDPROC(?,?)}");
SQLCancel();