小编Jar*_*rrr的帖子

字典"ContainsKey"上的双重检查锁定

我的团队目前正在讨论这个问题.

有问题的代码就是这样的

if (!myDictionary.ContainsKey(key))
{
    lock (_SyncObject)
    {
        if (!myDictionary.ContainsKey(key))
        {
            myDictionary.Add(key,value);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我见过的一些帖子说这可能是一个很大的NO NO(当使用TryGetValue时).然而,我们团队的成员说没关系,因为"ContainsKey"不会对密钥集合进行迭代,而是通过O(1)中的哈希代码检查密钥是否包含在内.因此他们声称这里没有危险.

我想就此问题得到您的诚实意见.

c# collections multithreading dictionary double-checked-locking

15
推荐指数
3
解决办法
4036
查看次数

SqlPackage.exe 需要很长时间

因此,我们正在努力添加 SQL DACPAC 作为我们持续集成的一部分。我们使用运行“sqlpackage.exe”和每个 DacPac 文件的 powershell 脚本来做到这一点。我们有大约 12 个 DB,因此大约有 12 个 DacPac。

每次我们运行“sqlpackage.exe”来发布或编写 DacPac 脚本时,我们都会注意到完成初始化需要 0.5-1 分钟以上的时间。当“sqlpackage.exe”开始时,大部分时间是在初始化流程中花费的。

如果可能的话,我试图找到一种方法来减少这种情况,因为我们有 12 个数据库,我们正在谈论数据库部署至少需要 12 分钟,这对我们来说太多了。

你知道有什么方法可以减少这种情况吗?

sql-server powershell dacpac sql-server-data-tools

5
推荐指数
1
解决办法
2433
查看次数

UnityContainer性能测试结果

作为团结基本演示的一部分,我创建了以下控制台应用程序(有点冗长):

IUnityContainer container = new UnityContainer();
        container.RegisterType<ISimpleClass, SimpleClass>();
        container.RegisterType<ISingletonWithUnity, SingletonWithUnity>(new ContainerControlledLifetimeManager());

        double N = 10000;
        double sum = 0;

        Console.WriteLine("Testing performace of a basic new object");
        for (int i = 0; i < N; i++)
        {
            DateTime start = DateTime.Now;
            ISimpleClass simpleClass = new SimpleClass();
            DateTime end = DateTime.Now;
            sum += (end - start).Milliseconds;
        }
        double average = sum/N;
        Console.WriteLine("Average time for basic new object is: " + average);


        Console.WriteLine("Testing performance of transient resolve using unity");
        sum = 0;
        for …
Run Code Online (Sandbox Code Playgroud)

c# performance unity-container console-application

3
推荐指数
1
解决办法
1597
查看次数