Недавно я опубликовал топикпро бред код написанный индусом. В результате в комментариях были высказаны мнения, что это вовсе не бред, а нормальный код в С-style.
Да, спорить не буду — это C-style, но мне стало интересно — а как же производительность, что быстрее? Ибо «Практика без теории слепа, а теория без практики мертва». Поэтому утром я решил сваять маленький тестик.
Написал следующий класс:
Как видно из класса, я решил проверить, а что же быстрее:
Быстродействие кода я замерял следующим способом:
чтоже получилось в результате у меня.
И для большей наглядноти, построим график.

Чтож, признаюсь, немного поторопился назвать это кодобредом, истина восторжествовала :)
Спасибо хабролюдям Egiptyanin beeruser lam0x86 porchini за обсуждение предыдущего топика :).
Да, спорить не буду — это C-style, но мне стало интересно — а как же производительность, что быстрее? Ибо «Практика без теории слепа, а теория без практики мертва». Поэтому утром я решил сваять маленький тестик.
Написал следующий класс:
- class TestClass
- {
- private List<String> _generatedDigits;
-
- public TestClass()
- {
- _generatedDigits = new List<string>();
- }
-
- public void GenerateList(Int32 listLength)
- {
- Random rnd = new Random(DateTime.Now.Millisecond);
- _generatedDigits.Clear();
-
- for (Int32 i = 0; i < listLength; ++i)
- {
- _generatedDigits.Add(rnd.Next().ToString());
- }
- }
-
- public bool TestTryParse()
- {
- bool result = true;
- Int32 outValue = 0;
-
- foreach (String str in _generatedDigits)
- {
- result &= Int32.TryParse(str, out outValue);
- }
-
- return (result);
- }
-
- public bool TestIndusCode()
- {
- bool result = true;
-
- foreach (String str in _generatedDigits)
- {
- for (int i = 0; i < str.Length; i++)
- if (char.IsDigit(str[i]) == false)
- result = false;
- }
-
- return (result);
- }
-
- public bool TestRegularExpression()
- {
- bool result = true;
-
- foreach (String str in _generatedDigits)
- {
- result &= Regex.IsMatch(str, @"^\d{0,}$");
- }
-
- return (result);
- }
- }
* This source code was highlighted with Source Code Highlighter.
Как видно из класса, я решил проверить, а что же быстрее:
- метод TryParse — который использовал я.
- код индуса.
- либо с помощью регулярных выражений, как заметил хаброчеловек Egiptyanin
Быстродействие кода я замерял следующим способом:
- TestClass testClass = new TestClass();
-
- testClass.GenerateList(10000000);
-
- Console.WriteLine(Environment.TickCount);
- testClass.TestTryParse();
- Console.WriteLine(Environment.TickCount);
- testClass.TestIndusCode();
- Console.WriteLine(Environment.TickCount);
- testClass.TestRegularExpression();
- 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 за обсуждение предыдущего топика :).