Оптимизация строк

Оптимизация строк

 

Данная функциональность позволяет значительно увеличить скорость выполнения функций, работающих со строками (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;
}




 

 

 
15.11.2008
 
 
 
 
10.12  .NET Reactor
15.11  n
15.11  C# ClickOnce
 
11.10  GAC и ngen
10.10  SqlTypes