C# 如何增加OrmLite ServiceStack中的命令超时?
我使用的是ServiceStack OrmLite SqlServer v3.9.71,具有以下连接字符串:C# 如何增加OrmLite ServiceStack中的命令超时?,c#,.net,sql-server,connection-string,
ormlite-servicestack,C#,.net,Sql Server,Connection String,
ormlite Servicestack,我使用的是ServiceStack OrmLite SqlServer v3.9.71,具有以下连接字符串: <add key="ConnStr" value="Data Source=my-db;Initial Catalog=Users;Integrated Security=SSPI;Connection Timeout=666"/> 我使用以下命令运行查询,返回查询需要2-3分钟: using (Db) { var result = new ResultDto(
<add key="ConnStr" value="Data Source=my-db;Initial Catalog=Users;Integrated Security=SSPI;Connection Timeout=666"/>
我使用以下命令运行查询,返回查询需要2-3分钟:
using (Db)
{
var result = new ResultDto();
Parallel.Invoke(
() => { result.StatOne = Db.Dictionary<DateTime, int>(query1); },
() => { result.StatTwo = Db.Dictionary<DateTime, int>(query2); }
);
return result;
}
使用(Db)
{
var result=new ResultDto();
并行调用(
()=>{result.StatOne=Db.Dictionary(query1);},
()=>{result.StatTwo=Db.Dictionary(query2);}
);
返回结果;
}
在Db对象上放置断点时,我可以看到连接超时为666
,但我不知道如何在每次运行上述命令时设置/增加命令超时,它在30
秒后超时,这是默认超时
有什么想法吗?可以在OrmLite中使用
或mliteConfig.CommandTimeout设置超时,作为全局配置,可以在启动时设置一次:
OrmLiteConfig.CommandTimeout = 666;
或者,您可以改为使用以下命令将CommandTimeout作用域设置为特定的db连接:
using (var db = DbFactory.Open())
{
db.SetCommandTimeout(60);
db.Select(...);
}
这看起来像是命令超时
而不是连接超时
@bummi,谢谢我现在更新了这个问题。我不熟悉OrmLite,但这可能有用吗?tnx,这是全局配置吗?你建议我在哪里设置这个?在设置容器时?有什么方法可以设置每个查询而不是全局查询?@MaYaN我已经更新了答案,以说明如何为特定请求设置它。在线程应用程序中使用db.SetCommandTimeout时要非常小心,因为在我们的例子中,它似乎会导致在其他线程上的其他连接上运行命令立即超时。设置全局设置解决了这个问题。我们花了3天时间才弄明白为什么执行1个线程有效,而当我们通过设置0将超时设置为无限时,30秒后多次超时。如果可能的话,使用全局设置可以避免很多痛苦。@Seer:您还记得您是如何在每个线程中打开连接的吗?是每个线程创建一个新的IDbConnection
实例并设置超时,还是每个线程在共享实例上设置超时?IDbConnection
实例不是线程安全的,在我的例子中,在尝试在不同线程中的查询之间共享它时会导致问题——我还没有尝试使用超时设置。