Как стать автором
Обновить

Разбор полёта C# perfomance

Время на прочтение 3 мин
Количество просмотров 1.4K
Недавно я опубликовал топикпро бред код написанный индусом. В результате в комментариях были высказаны мнения, что это вовсе не бред, а нормальный код в С-style.

Да, спорить не буду — это C-style, но мне стало интересно — а как же производительность, что быстрее? Ибо «Практика без теории слепа, а теория без практики мертва». Поэтому утром я решил сваять маленький тестик.
Написал следующий класс:
  1. class TestClass
  2.   {
  3.     private List<String> _generatedDigits;
  4.  
  5.     public TestClass()
  6.     {
  7.       _generatedDigits = new List<string>();
  8.     }
  9.  
  10.     public void GenerateList(Int32 listLength)
  11.     {
  12.       Random rnd = new Random(DateTime.Now.Millisecond);
  13.       _generatedDigits.Clear();
  14.  
  15.       for (Int32 i = 0; i < listLength; ++i)
  16.       {
  17.         _generatedDigits.Add(rnd.Next().ToString());
  18.       }
  19.     }
  20.  
  21.     public bool TestTryParse()
  22.     {
  23.       bool result = true;
  24.       Int32 outValue = 0;
  25.  
  26.       foreach (String str in _generatedDigits)
  27.       {
  28.         result &= Int32.TryParse(str, out outValue);
  29.       }
  30.  
  31.       return (result);
  32.     }
  33.  
  34.     public bool TestIndusCode()
  35.     {
  36.       bool result = true;
  37.  
  38.       foreach (String str in _generatedDigits)
  39.       {
  40.         for (int i = 0; i < str.Length; i++)
  41.           if (char.IsDigit(str[i]) == false)
  42.             result = false;
  43.       }
  44.  
  45.       return (result);
  46.     }
  47.  
  48.     public bool TestRegularExpression()
  49.     {
  50.       bool result = true;
  51.  
  52.       foreach (String str in _generatedDigits)
  53.       {
  54.         result &= Regex.IsMatch(str, @"^\d{0,}$");
  55.       }
  56.  
  57.       return (result);
  58.     }
  59.   }
* This source code was highlighted with Source Code Highlighter.


Как видно из класса, я решил проверить, а что же быстрее:
  • метод TryParse — который использовал я.
  • код индуса.
  • либо с помощью регулярных выражений, как заметил хаброчеловек Egiptyanin


Быстродействие кода я замерял следующим способом:

  1. TestClass testClass = new TestClass();
  2.  
  3. testClass.GenerateList(10000000);
  4.  
  5. Console.WriteLine(Environment.TickCount);
  6. testClass.TestTryParse();
  7. Console.WriteLine(Environment.TickCount);
  8. testClass.TestIndusCode();
  9. Console.WriteLine(Environment.TickCount);
  10. testClass.TestRegularExpression();
  11. Console.WriteLine(Environment.TickCount);
* This source code was highlighted with Source Code Highlighter.


чтоже получилось в результате у меня.
С-style TryParse Регулярное выражение Число обрабатываемый элементов
10 O 16 10000
15 32 203 100000
125 312 1656 1000000


И для большей наглядноти, построим график.


Чтож, признаюсь, немного поторопился назвать это кодобредом, истина восторжествовала :)
Спасибо хабролюдям Egiptyanin beeruser lam0x86 porchini за обсуждение предыдущего топика :).
Теги:
Хабы:
+14
Комментарии 35
Комментарии Комментарии 35

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн
PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн