Сравнение строк в dotnet framework 4

Я объясню свою проблему (извините за плохой английский), у меня есть .NET exe, в котором очень важны каждая миллисекунда обработки.

Эта программа выполняет множество сравнений строк (в основном это string1.IndexOf (string2, StringComparison.OrdinalIgnoreCase) ).

Когда я переключаюсь на платформу 4, время моей программы вдвое больше, чем раньше.

Я искал объяснение и обнаружил, что функция IndexOf (s, OrdinalIgnoreCase) намного медленнее в структуре 4 (я тестировал с помощью простого консольного приложения, и в цикле время составляло 30 мс за 3,5 и 210 мс в 4.0 ???). Но сравнение в текущей культуре происходит быстрее в рамках 4, чем в 3.5.

Вот пример кода, который я использую:

int iMax = 100000;
String str  = "Mozilla/5.0+(Windows;+U;+Windows+NT+5.1;+fr;+rv:1.9.0.1)+Gecko/2008070208+Firefox/3.0.1";
Stopwatch sw = new Stopwatch();
sw.Start();
StringComparison s = StringComparison.OrdinalIgnoreCase;
for(int i = 1;i<iMax;i++)
{
    str.IndexOf("windows", s);
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
Console.Read();

Мои вопросы:

  1. Кто-нибудь заметил ту же проблему ?

  2. У кого-нибудь есть объяснение по поводу этого изменения?

  3. Есть ли способ обойти проблему?

Спасибо.

6
задан nawfal 6 June 2013 в 06:11
поделиться