Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 这种记忆化会比每次只创建DbProviderFactory更快吗?_C#_Multithreading_Memoization_Dbproviderfactories - Fatal编程技术网

C# 这种记忆化会比每次只创建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

这种记忆化会比每次只创建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;
    }
}
更新


Memorization只是一个ConcurrentDictionary。

您使用了多少不同的存储,需要不同的提供程序工厂?我们有几个连接字符串,我们希望能够为系统的不同部分测试不同的存储提供程序,它们是自定义的。您使用多少不同的存储需要不同的提供程序工厂?我们有几个连接字符串,我们希望能够为系统的不同部分测试不同的存储提供程序,它们是自定义的。