Будет ли это запоминание быстрее, чем просто создание DbProviderFactory каждый раз? - PullRequest
2 голосов
/ 31 мая 2011

Будет ли это запоминание быстрее, чем просто создание 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>>.

...