为了说明这个问题,请参考 Microsoft Scripting Runtime 和下面的代码来编译一个 C# 项目。运行生成的可执行文件的单个实例。在我的 12 核机器上,读取循环始终需要大约 180 毫秒。启动另一个可执行文件实例会减慢速度,每个附加可执行文件大约 100 毫秒。
有什么想法吗?除了切换到不同的字典实现之外,还有什么解决方案?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
System.Diagnostics.Stopwatch stp = new System.Diagnostics.Stopwatch();
var dict = (Scripting.IDictionary)(new Scripting.Dictionary());
stp.Start();
for (int i = 1; i < 1000; ++i)
{
Object s = i.ToString();
dict.Add(ref s, ref s);
}
Console.WriteLine("After Add {0}", stp.ElapsedMilliseconds);
object q = null;
for (int j = 0; j < 1000; ++j)
{
long old = stp.ElapsedMilliseconds;
for (int i = 1; i < 10000; ++i)
{
q = null;
object s = i.ToString() as object;
q = dict.get_Item(ref s);
}
long newval = stp.ElapsedMilliseconds;
Console.WriteLine("After Retrieve {0}", newval - old);
}
}
}
}