none
Быстродействие LinQ при обработке массива RRS feed

  • Вопрос

  • Для сравнения быстродействия при получении минимального и максимального числа в строке массива с помощью циклов и LinQ я сформировал квадратную матрицу из случайных чисел. В среде Visual Studio при запуске релиза LinQ оказался медленнее в 3 раза, а без среды - в 6 раз. По объему кода LinQ впереди (всего одна строка). Получается, что LinQ можно использовать только тогда, когда вопросы производительности не являются главными, а нужно быстро получить результат обработки. Такой вывод меня не очень радует. Когда я немного поработал с LinQ, то очень понравилась лаконичность, но вот с потерей производительности не очень хочется мириться. Может быть я неправильно записал запрос LinQ или его как-то можно оптимизировать? Может быть я неправильно сравниваю результаты?

    Мой проект с тестом находится на http://zalil.ru/31444726. В тесте можно менять размеры матрицы и диапазон генерации случайных чисел.


    Alex
    20 июля 2011 г. 9:38

Ответы

Все ответы

  • Обработка массива 5000 на 5000, без многопоточности, без lazy evaluation, с приостановкой всего остального выполнения - это действительно акутальный случай, от которого зависит производительность вашей системы?
    My blog | My Favorite Project
    21 июля 2011 г. 12:49
    Модератор
  • Матрица у меня гораздо больше, поэтому ищу пути повышения производительности ее обработки. Одним из элементов обработки является получение минимального и максимального элементов в строке. Вот попробовал LinQ. С многопоточностью раньше пробовал работать (Parallel.For), большого выигрыша не получилось. С lazy evaluation как-то раньше не работал, плохо себе представляю, какой будет выигрыш при использовании. Буду благодарен за любые советы по повышению производительности обработки.
    Alex
    21 июля 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
  • Спасибо за ответы, попробую еще раз проанализировать задачу и выбрать подходящий инструмент ее решения


    Alex
    23 июля 2011 г. 10:38