Чтобы проиллюстрировать эту проблему, скомпилируйте проект C# со ссылкой на Runtime Microsoft Scripting Runtime и код ниже. Запустите один экземпляр результирующего исполняемого файла. На моей 12-ядерной машине цикл чтения последовательно занимает около 180 мс. Запуск другого экземпляра исполняемого файла замедляет это, примерно на 100 мс на дополнительный исполняемый файл.Scripting.Dictionary Performance страдает в нескольких процессах
Любые идеи, что происходит? И любые решения, кроме переключения на другую реализацию словаря?
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);
}
}
}
}
Прокрутка тысячи строк текста через консоль, в то время как временной код - очень плохая идея. –
Я написал 'Scripting.Dictionary' в 1997 году.Я понятия не имею, в чем причина вашей проблемы, но мне было бы интересно узнать. Как бы то ни было, я могу заверить вас, что это вряд ли когда-либо будет исправлено. –