Как Array.Sort в C # так быстро? - PullRequest
7 голосов
/ 28 мая 2011

Привет, я пытался найти ответ (как в stackoverflow, так и в google) на вопрос, как Array.Sort в C # настолько быстр.Я не нашел ни одного.

Не важно, какой алгоритм я использовал, мне не удавалось сортировать большие массивы быстрее, чем он.Я знаю, что он использует быструю сортировку, но он должен быть очень оптимизирован.

Кто-нибудь знает, как они сделали это так быстро?

Ответы [ 2 ]

17 голосов
/ 28 мая 2011

Это стандартный код быстрой сортировки, написанный на C #. Вы можете найти его в ArraySortHelper <>. QuickSort с, скажем, Reflector.

Довольно стандартной ошибкой при профилировании кода является отключение оптимизатора JIT. Что произойдет, когда вы запустите сборку Debug или подключите отладчик. Этого не произойдет, если вы профилируете метод Array.Sort (), он был предварительно добавлен ngen.exe, когда на вашем компьютере был установлен .NET. Оптимизатор оказывает большое влияние на качество генерируемого машинного кода. Проверьте этот ответ на тип оптимизации, которую он выполняет.

Вы можете отлаживать машинный код качества выпуска, но это требует изменения параметра. Сначала переключитесь на конфигурацию Release. Затем Tools + Options, Debugging, General, снимите отметку «Подавить оптимизацию JIT при загрузке модуля». Остерегайтесь ловушек, вы увидите эффекты встраивания, подъема кода и исключения локальных переменных.

5 голосов
/ 28 мая 2011

Вы можете использовать ILSpy для дизассемблирования кода.Я ожидаю, что нативные методы во внутреннем коде сортировки ускорят процесс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...