хорошо - время новой истины!
Это был тест для любого символа верхнего регистра в строке.
Строка гарантированно не содержит символов верхнего регистра в первых 60К символов.
(Я создал строку из random.org)
Я предотвратил оптимизацию подстановки строк в компиляторе путем рандомизации того, какая 64-символьная строка была передана в тестовую функцию.
Все сроки были очень строго соответствуют фактическому тесту и не включали время вызова функции.
Я запускал тест один раз, 10 раз и снова по 10000 раз и усреднял каждый набор времени для каждого теста.
Я провел тест на 64-битной Win 7 с процессором i3-2100 @ 3,1 ГГц
Контрольный пример 1:
static bool testCaseOne(string str, out double ms)
{
bool result = false;
DateTime start = DateTime.Now;
result = !string.IsNullOrEmpty(str) && str.Any(c => char.IsUpper(c));
ms = (DateTime.Now - start).TotalMilliseconds;
return result;
}
Итоговое среднее время:
- 1 X = 3000 мс
- 10 x = 0,860 мс
- 10000 х = 0,821 мс
Контрольный пример 2:
static bool testCaseTwo(string str, out double ms)
{
bool result = false;
DateTime start = DateTime.Now;
if (string.IsNullOrEmpty(str))
{
ms = 0;
return false;
}
result = Regex.IsMatch(str, "[A-Z]");
ms = (DateTime.Now - start).TotalMilliseconds;
return result;
}
Итоговое среднее время:
- 1 x = 2.000 мс
- 10 x = 1,597 мс
- 10000 х = 1,603 мс
Контрольный пример 3:
static bool testCaseThree(string str, out double ms)
{
bool result = false;
DateTime start = DateTime.Now;
if (string.IsNullOrEmpty(str))
{
ms = 0;
return false;
}
for (int i = 0; i < str.Length; i++)
{
if (char.IsUpper(str[i]))
{
result = true;
break;
}
}
ms = (DateTime.Now - start).TotalMilliseconds;
return result;
}
Итоговое среднее время:
- 1 x = 1.000 мс
- 10 x = 0,357 мс
- 10000 х = 0,298 мс
Контрольный пример 4:
static bool testCaseFour(string str, out double ms)
{
bool result = false;
DateTime start = DateTime.Now;
if (string.IsNullOrEmpty(str))
{
ms = 0;
return false;
}
for (int i = 0; i < str.Length; i++)
{
if (str[i] > 64 && str[i] < 91)
{
result = true;
break;
}
}
ms = (DateTime.Now - start).TotalMilliseconds;
return result;
}
}
Итоговое среднее время:
- 1 x = 0,000 мс
- 10 x = 0,137 мс
- 10000 х = 0,184 мс
Интересно.
Надеюсь, это будет мистер Р. К.;)