C# 这种记忆化会比每次只创建DbProviderFactory更快吗?
这种记忆化会比每次只创建DbProviderFactory更快吗 我不知道线程锁是否会比每次只创建DbProviderFactory慢C# 这种记忆化会比每次只创建DbProviderFactory更快吗?,c#,multithreading,memoization,dbproviderfactories,C#,Multithreading,Memoization,Dbproviderfactories,这种记忆化会比每次只创建DbProviderFactory更快吗 我不知道线程锁是否会比每次只创建DbProviderFactory慢 public abstract class Connections { private class Memoization : ConcurrentDictionary<string, Tuple<string, DbProviderFactory>> { } static Memoization _c
public abstract class Connections {
private class Memoization
: ConcurrentDictionary<string, Tuple<string, DbProviderFactory>> { }
static Memoization _connectionInfo = new Memoization();
static DbConnection CreateConnection(string connectionStringSettingsName) {
var tmp = _connectionInfo.GetOrAdd(connectionStringSettingsName, csn => {
var config = ConfigurationManager.ConnectionStrings[csn];
var factory = DbProviderFactories.GetFactory(config.ProviderName);
var connectionString = config.ConnectionString;
return Tuple.Create(connectionString, factory);
});
var conn = tmp.Item2.CreateConnection();
conn.ConnectionString = tmp.Item1;
return conn;
}
}
更新
Memorization只是一个ConcurrentDictionary。您使用了多少不同的存储,需要不同的提供程序工厂?我们有几个连接字符串,我们希望能够为系统的不同部分测试不同的存储提供程序,它们是自定义的。您使用多少不同的存储需要不同的提供程序工厂?我们有几个连接字符串,我们希望能够为系统的不同部分测试不同的存储提供程序,它们是自定义的。