是否值得在c#中缓存GetEnvironmentVariable?

时间:2016-04-26 20:25:12

标签: c# environment-variables

我有一个程序可以多次读取环境变量(不确定精确计数,但可能有数千个)。我想看看将它们放在字典中是否有意义,因为它一遍又一遍地使用大约5个变量。我的第一个想法是GetEnvironmentVariable可能不会花费太多开销,因为它总是会打击内存。我创建了以下测试:

        Stopwatch sw = new Stopwatch();
        sw.Start();
        Dictionary<string, string> vals = new Dictionary<string, string>();
        vals["TargetRoot"] = "Hey";
        for (int i = 0; i < 5e6; i++)
        {
            var j = vals["TargetRoot"];
            if (j != null && j.Equals("hello there" + i))
            {
                break;
            }
        }
        Console.WriteLine("Dictionary: " + sw.Elapsed);
        sw.Restart();
        for (int i = 0; i < 5e6; i++)
        {
            var j = Environment.GetEnvironmentVariable("TargetRoot");
            if (j != null && j.Equals("hello there" + i))
            {
                break;
            }
        }
        Console.WriteLine("EnvVar: " + sw.Elapsed);

在这种情况下设置TargetRoot,但永远不会满足if条件。我添加if条件的原因是编译器不会短路。结果如下:

调试:

Dictionary: 00:00:00.8907373
EnvVar: 00:00:19.3848903

零售:

Dictionary: 00:00:00.8625990
EnvVar: 00:00:19.3109294

VS调试器中的调试:

Dictionary: 00:00:01.0370544
EnvVar: 00:00:04.9588787

您认为此测试是否值得信赖,我能否得出结论GetEnvironmentVariable比使用本地缓存慢5-20倍?请注意,似乎我的cpus在20秒内处于100%,所以我怀疑它比内存限制更多cpu绑定,但不是正面。

0 个答案:

没有答案