爲了說明這個問題,編譯一個C#項目,引用Microsoft Scripting Runtime和下面的代碼。運行生成的可執行文件的單個實例。在我的12核心機器上,讀取循環持續約180ms。啓動另一個可執行文件的實例會減慢速度,每增加一個可執行文件大約100毫秒。Scripting.Dictionary性能受多個進程影響
任何想法發生了什麼?除了切換到不同的字典實現以外的任何解決方案?
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);
}
}
}
}
在控制檯上滾動一千行文本,而計時代碼是一個非常糟糕的主意。 – 2013-05-09 17:47:28
我在1997年寫了'Scripting.Dictionary'。我不知道你的問題是什麼原因,但我會很好奇。不管它是什麼,我都可以向你保證它不太可能被修復。 – 2013-05-09 19:25:22