Оптимизация строк
Данная функциональность позволяет значительно увеличить скорость выполнения функций, работающих со строками (string.StartWith(), string.IndexOff(), string.LastIndexOff()). Для оптимизации применяются следующие методы:
- Замена функций String.StartWith
Стандартные функции System.String.StartWith автоматический заменяются оптимизированными вариантами, скорость работы которых в 5-20 раз выше.
- Замена функций String.IndexOf
Стандартные функции System.String.IndexOf автоматический заменяются оптимизированными вариантами, скорость работы которых в 3-10 раз выше.
- Замена функций String.LastIndexOf
Стандартные функции System.String.LastIndexOf автоматический заменяются оптимизированными вариантами, скорость работы которых в 2-10 раз выше.
Настройка параметров оптимизации строк
Внешний вид вкладки Оптимизация строк (с пометками)
Опции:
- Разрешить оптимизацию строк - Включение режима оптимизации строк;
- Сборка - модуль, для которого производится оптимизация;
- String.StartWith - опция включает режим замены функции String.StartWith;
- String.IndexOf - опция включает режим замены функции String.IndexOf;
- String.LastIndexOf - опция включает режим замены функции String.LastIndexOf;
Пример результата оптимизации строк
Код на котором проводился тест производительности: TestProject-string_optimize.zip
[System.Runtime.InteropServices.DllImport("Kernel32.dll",
CharSet = System.Runtime.InteropServices.CharSet.Auto)]
public static extern uint GetTickCount();
///
/// Function
///
///
public string Function()
{
DateTime time = DateTime.Now;
string s = "Function time: " + time.ToString();
if ((time.Second % 10) == 5)
{
s += " - 5";
}
int count;
uint t1, t2;
string s1 = "1234567890 Оптимизация строк - StartWith";
string s1_find1 = "1234567890";
string s1_find2 = "FVerbeb;ebb";
count = 0;
t1 = GetTickCount();
for (int i = 0; i < 1000000; i++)
{
if (s1.StartsWith(s1_find1))
count++;
if (s1.StartsWith(s1_find2))
count++;
}
t2 = GetTickCount();
s += "\r\n" + "StartsWith=" + (t2 - t1) + " ms";
s1 = "Оптимизация строк - IndexOf - 1234567890 ";
s1_find1 = "1234567890";
s1_find2 = "FVerbeb;ebb";
count = 0;
t1 = GetTickCount();
for (int i = 0; i < 1000000; i++)
{
if (s1.IndexOf(s1_find1)>=0)
count++;
if (s1.IndexOf(s1_find2) >= 0)
count++;
}
t2 = GetTickCount();
s += "\r\n" + "IndexOf=" + (t2 - t1) + " ms";
s1 = "Оптимизация строк - LastIndexOf - 1234567890 ";
s1_find1 = "1234567890";
s1_find2 = "FVerbeb;ebb";
count = 0;
t1 = GetTickCount();
for (int i = 0; i < 1000000; i++)
{
if (s1.LastIndexOf(s1_find1) >= 0)
count++;
if (s1.LastIndexOf(s1_find2) >= 0)
count++;
}
t2 = GetTickCount();
s += "\r\n" + "LastIndexOf=" + (t2 - t1) + " ms";
return s;
}