Будет ли это запоминание быстрее, чем просто создание DbProviderFactory каждый раз?
Будет ли это запоминание быстрее, чем просто создание DbProviderFactory каждый раз?
Я не знаю, будут ли блокировки потоков медленнее, чем просто создание DbProviderFactory каждый раз.
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;
}
}
Обновить
Memoization
это просто ConcurrentDictionary<string,Tuple<string,DbProviderFactory>>
,