Unk*_*eef 6 .net c# http snowflake-cloud-data-platform
关于snowflake .NET连接器:https://github.com/snowflakedb/snowflake-connector-net,我在文档或源代码中找不到任何内容表明支持连接池,并且因为连接本身由HttpClient,我们知道HttpClient 应该重用而不是不断创建/处置,当您要跨线程进行许多查询时,使用雪花 .NET 连接器的最佳方法是什么?
注意:我不打算在创建连接后更改连接的任何属性(架构、数据库等)。
例如:
// application startup registers this provider as a singleton
public class SnowflakeConnectionProvider : IDisposable
{
private IDbConnection _conn;
public SnowflakeConnectionProvider()
{
_conn = new SnowflakeDbConnection();
_conn.ConnectionString = "connectionString";
_conn.Open();
}
public IDbConnection conn { get => _conn; }
public Dispose() => _conn.Close();
}
Run Code Online (Sandbox Code Playgroud)
现在,多个线程共享一个线程是否安全,SnowflakeDbConnection如下所示:
public class Worker
{
public Worker(SnowflakeConnectionProvider provider)
{
IDbConnection conn = provider.conn;
IDbCommand cmd = conn.CreateCommand();
cmd.CommandText = "select * from t";
IDataReader reader = cmd.ExecuteReader();
while(reader.Read())
{
Console.WriteLine(reader.GetString(0));
}
}
}
Run Code Online (Sandbox Code Playgroud)
来自 GitHub 的摘要:连接器是线程安全的。
只要您不在雪花代码中使用任何会话变量,就可以让多个线程共享同一个 SnowflakeDbConnection。无论您是重用线程还是一直创建新线程,都没有关系。
即使您不断地从多个不同线程创建和处置连接,单个 HttpClient 也会创建一次,然后由所有连接重用和共享。
https://github.com/snowflakedb/snowflake-connector-net/issues/275
| 归档时间: |
|
| 查看次数: |
1270 次 |
| 最近记录: |