Сообщение Re[5]: быстрый ToEnumerable от 26.04.2015 11:07
Изменено 26.04.2015 11:08 tyomchick
T>>Т.е. большая нагрузка на кучу сохраняется.
T>>Получается объект всё равно в кучке создается или просто при приведении к интерфейсу всё равно боксинг происходит?
_>В этом случае решарпер показал аж 3 боксинга. После того как я изменил код на использование stopwatch, сделал несколько проходов для устаканивания JIT, добавил GC.Collect, а твой сам-себе итератор поправил на класс чтобы ушли боксинги, получилось примерно так.
Ага, спасибо за нормальный тестер.
Правда на моей рабочей машине результат не стабильный. Судя по всему дело в том, что мой комп беден оперативкой и в ходе теста запускается сборщик мусора. На это указывают и странные показатели по памяти. И тест производительности по сути мало что показывает, т.к. портится запуском сборщика.
Я заменил в этом тесте бесполезный показатель Memory WS, на CollectionCount(0):
код | |
| |
Получилось такое:
Тест 0 запущен
Time: 17, Memory GC: 0, Collection count: 0
Тест 1 запущен
Time: 414, Memory GC: 1073152, Collection count: 133
Тест 2 запущен
Time: 447, Memory GC: 1531904, Collection count: 190
Тест 3 запущен
Time: 448, Memory GC: 1385824, Collection count: 171
Тест 4 запущен
Time: 331, Memory GC: 614400, Collection count: 76
Уменьшил число итераций в 200 раз. Запускал на с приоритетом "Real Time", для предотвращения переключения контекста процессора. Результат в тиках (stopwatch.ElapsedTicks):
Тест 0 запущен
Time: 305, Memory GC: 0, Collection count: 0
Тест 1 запущен
Time: 15790, Memory GC: 1392640, Collection count: 0
Тест 2 запущен
Time: 17193, Memory GC: 1998848, Collection count: 0
Тест 3 запущен
Time: 17490, Memory GC: 1794048, Collection count: 0
Тест 4 запущен
Time: 12304, Memory GC: 794624, Collection count: 0
Получается из реальный итераторов (к коим "сам-себе", как ты справедливо заметил не относится) самый быстрый yield?
T>>Т.е. большая нагрузка на кучу сохраняется.
T>>Получается объект всё равно в кучке создается или просто при приведении к интерфейсу всё равно боксинг происходит?
_>В этом случае решарпер показал аж 3 боксинга. После того как я изменил код на использование stopwatch, сделал несколько проходов для устаканивания JIT, добавил GC.Collect, а твой сам-себе итератор поправил на класс чтобы ушли боксинги, получилось примерно так.
Ага, спасибо за нормальный тестер.
Правда на моей рабочей машине результат не стабильный. Судя по всему дело в том, что мой комп беден оперативкой и в ходе теста запускается сборщик мусора. На это указывают и странные показатели по памяти. И тест производительности по сути мало что показывает, т.к. портится запуском сборщика.
Я заменил в этом тесте бесполезный показатель Memory WS, на CollectionCount(0):
код | |
| |
Получилось такое:
Тест 0 запущен
Time: 17, Memory GC: 0, Collection count: 0
Тест 1 запущен
Time: 414, Memory GC: 1073152, Collection count: 133
Тест 2 запущен
Time: 447, Memory GC: 1531904, Collection count: 190
Тест 3 запущен
Time: 448, Memory GC: 1385824, Collection count: 171
Тест 4 запущен
Time: 331, Memory GC: 614400, Collection count: 76
Уменьшил число итераций в 200 раз. Запускал с приоритетом "Real Time", для предотвращения переключения контекста процессора. Результат в тиках (stopwatch.ElapsedTicks):
Тест 0 запущен
Time: 305, Memory GC: 0, Collection count: 0
Тест 1 запущен
Time: 15790, Memory GC: 1392640, Collection count: 0
Тест 2 запущен
Time: 17193, Memory GC: 1998848, Collection count: 0
Тест 3 запущен
Time: 17490, Memory GC: 1794048, Collection count: 0
Тест 4 запущен
Time: 12304, Memory GC: 794624, Collection count: 0
Получается из реальный итераторов (к коим "сам-себе", как ты справедливо заметил не относится) самый быстрый yield?