Лучший отвечающий
Быстродействие LinQ при обработке массива

Вопрос
-
Для сравнения быстродействия при получении минимального и максимального числа в строке массива с помощью циклов и LinQ я сформировал квадратную матрицу из случайных чисел. В среде Visual Studio при запуске релиза LinQ оказался медленнее в 3 раза, а без среды - в 6 раз. По объему кода LinQ впереди (всего одна строка). Получается, что LinQ можно использовать только тогда, когда вопросы производительности не являются главными, а нужно быстро получить результат обработки. Такой вывод меня не очень радует. Когда я немного поработал с LinQ, то очень понравилась лаконичность, но вот с потерей производительности не очень хочется мириться. Может быть я неправильно записал запрос LinQ или его как-то можно оптимизировать? Может быть я неправильно сравниваю результаты?
Мой проект с тестом находится на http://zalil.ru/31444726. В тесте можно менять размеры матрицы и диапазон генерации случайных чисел.
Alex20 июля 2011 г. 9:38
Ответы
-
Если хотите производительность - то от LINQ действительно придется откразаться, в пользу небезопасного кода (unsafe) и указателей (fixed). Вообще многое зависит от самой задачи.
Также будет полезной статья - Harness the Features of C# to Power Your Scientific Computing Projects, правда перевода на русский нету.
Для связи [mail]- Помечено в качестве ответа tumanovalex 23 июля 2011 г. 10:36
22 июля 2011 г. 8:24 -
LINQ - это не для вас. Если хотите считать на CPU, то возьмите Intel Math Kernel Library. Если есть GPU - берите CUBLAS.
- Dmitri Nesteruk, MVP C#, Microsoft Partner- Предложено в качестве ответа PashaPashModerator 22 июля 2011 г. 11:51
- Помечено в качестве ответа tumanovalex 23 июля 2011 г. 10:36
22 июля 2011 г. 8:28
Все ответы
-
Обработка массива 5000 на 5000, без многопоточности, без lazy evaluation, с приостановкой всего остального выполнения - это действительно акутальный случай, от которого зависит производительность вашей системы?
My blog | My Favorite Project21 июля 2011 г. 12:49Модератор -
Матрица у меня гораздо больше, поэтому ищу пути повышения производительности ее обработки. Одним из элементов обработки является получение минимального и максимального элементов в строке. Вот попробовал LinQ. С многопоточностью раньше пробовал работать (Parallel.For), большого выигрыша не получилось. С lazy evaluation как-то раньше не работал, плохо себе представляю, какой будет выигрыш при использовании. Буду благодарен за любые советы по повышению производительности обработки.
Alex21 июля 2011 г. 18:01 -
Матрица у меня гораздо больше, поэтому ищу пути повышения производительности ее обработки.
Alex
Тогда лучше про LINQ забыть.А можно забыть еще и про safe код, а вспомнить про unsafe.
21 июля 2011 г. 18:20Отвечающий -
Если хотите производительность - то от LINQ действительно придется откразаться, в пользу небезопасного кода (unsafe) и указателей (fixed). Вообще многое зависит от самой задачи.
Также будет полезной статья - Harness the Features of C# to Power Your Scientific Computing Projects, правда перевода на русский нету.
Для связи [mail]- Помечено в качестве ответа tumanovalex 23 июля 2011 г. 10:36
22 июля 2011 г. 8:24 -
LINQ - это не для вас. Если хотите считать на CPU, то возьмите Intel Math Kernel Library. Если есть GPU - берите CUBLAS.
- Dmitri Nesteruk, MVP C#, Microsoft Partner- Предложено в качестве ответа PashaPashModerator 22 июля 2011 г. 11:51
- Помечено в качестве ответа tumanovalex 23 июля 2011 г. 10:36
22 июля 2011 г. 8:28 -
Спасибо за ответы, попробую еще раз проанализировать задачу и выбрать подходящий инструмент ее решения
Alex23 июля 2011 г. 10:38