Вручную реализующие высокопроизводительные алгоритмы в.NET

Упущение определить виртуальный деструктор базового класса. Это означает, что вызов delete на Основе* не закончит тем, что разрушил полученную часть.

8
задан Community 23 May 2017 в 10:30
поделиться

3 ответа

Используя нерекурсивный код и, особенно, Как всегда с производительностью (и тем более при работе с управляемой средой), вы никогда не узнаете, пока не попробуете и не протестируете.

Теперь, вообще говоря, вы должны в основном писать что-то на C #, а затем оптимизировать его, оптимизировать еще немного, и если он все еще недостаточно хорош, определите точный критический фрагмент кода и перенесите его на C ++ (при этом будьте осторожны с ограничением количества границ управляемых / собственных вызовов).

7
ответ дан 5 December 2019 в 15:24
поделиться

Убедитесь, что вы сравниваете яблоки и яблоки.

При сортировке функция сравнения может быть доминирующей, и это может отличаться в разных реализациях.

Предполагая, что сравнение в обоих случаях выполняется достаточно быстро, чтобы не создавать проблем, тогда время может зависеть от таких вещей, как проверка границ массива, что может легко иметь большое значение.

1
ответ дан 5 December 2019 в 15:24
поделиться

Просто из любопытства, так как, несмотря на мой 9-летний опыт работы с .NET, я все еще постоянно совершаю эту ошибку: вы компилировали свой код в режиме Release с включенной оптимизацией? Код отладки работает значительно хуже, чем оптимизированный код выпуска.

Предполагая, что вы выполняете компиляцию в режиме выпуска, не должно быть большой разницы в производительности, если вы реализуете алгоритм аналогичным образом (т.е. Если вы хотите увидеть реализацию .NET и разобраться, вы можете загрузить SSCLI, Common Language Infrastructure с общим исходным кодом. Это общедоступная реализация интерфейса командной строки Microsoft, соответствующая стандарту ECMA. Это не 100% платформы .NET, которую мы все знаем и любим, но это значительная ее часть. Он может предоставить много информации, которую Reflector не может, включая внутренние реализации. Доступны все типы кода, включая C #, C ++ и даже в некоторых случаях ассемблер.

3
ответ дан 5 December 2019 в 15:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: