2008-12-10 4 views
1

Часто упоминается, что исключения являются дорогостоящими, а различные методы в .NET тоже дороги.Что представляет собой дорогостоящий метод или ресурс?

Что именно представляет собой дорогостоящий метод в .NET?

Пришло ли время для обработки процесса? НАПРИМЕР. Я получил поток ответов веб-страницы с использованием объекта WebClient (это не было асинхронно), и, получив ответ и назначив его переменной, потребовалось некоторое время, чтобы пройти через эту строку кода. Возможно, потому, что сама веб-страница была насыщенной графикой и большой. Чтобы узнать, сколько времени прошло, я знаю, что могу использовать секундомер или таймер (есть тонкая разница между двумя, которые я не могу запомнить).

Или это взятые ресурсы? Если да, то каков наилучший способ увидеть ресурсы, которые использует метод? Я знаю, что могу использовать один из методов GC или профилировщик. Какие существуют другие подходы?

+0

Сторона примечания: Стоимость .NET Исключения часто выражаются на несколько порядков. Если вы не бросаете тысячи из них каждую секунду, нет необходимости беспокоиться о них. – Bevan 2008-12-10 01:51:34

ответ

0

Ответ заключается в том, что у вас есть оба типа дорогостоящих операций.

Я лично использую ANTs Profiler от RedGate, чтобы мотивировать как время, так и аспекты памяти событий приложения и стоимость.

9

Дорогостоящий вопрос степени и контекста.

Работаю в обработке изображений, и считаю разделение дорогим. В моем случае добавляется любая операция, которая заканчивается выполнением от двух до пяти миллионов раз в одном цикле. Это может быть разница между 1/8 секунды и 1/32 секунды. 1/8 секунды в UI-времени много для динамического отображения. 1/32 является приемлемым.

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

В время веб-страницы это может быть количество обращений к серверу при загрузке страницы. Смотрите, что я имею в виду?

Контекст - это все.

Ресурсы считаются дорогостоящими, если они недостаточны и заставляют другие вещи ждать. Если у вас 1 диск без рейда, вы платите высокую цену за доступ, если два процесса отскакивают головой по всему месту, следовательно, сильно зависят от кэширования как на диске, так и в ОС.

Ваш принтер - очень дорогой ресурс, особенно если его нет на бумаге, поэтому очередь.

Исключения стоят дорого по сравнению с другими языковыми функциями. Вызов статического метода дешев. Обычный вызов метода немного дороже. Вызов виртуального метода немного дороже. Исключения намного дороже.

Например, вы можете жаловаться на то, что C# не имеет типов полиморфного возврата типа, и я мог бы сказать - о нет, он делает - просто бросьте свой результат и поймайте правильный тип с другой стороны. Затем я рассмеялся из комнаты, чтобы сделать предложение. По сравнению с возвратом (который является небольшим количеством инструкций), исключение может вызывать десятки до сотен, в зависимости от контекста.

+0

+1 для "это зависит" :-) – 2009-11-02 20:30:27

1

Да, когда люди говорят о том, что функции дороги, они обычно означают с точки зрения времени выполнения.(Цена, которую вы платите за вызов, - это то, что ваш поток блокируется на протяжении X микросекунд до тех пор, пока не завершится вызов функции)

Конечно, это может быть и дорогостоящим с точки зрения использования ресурсов, но обычно это время выполнения о которых говорят люди.

0

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

Например, исключения считаются дорогостоящими из-за количества тактовых циклов, необходимых для построения трассировки стека. Поэтому очень плохо использовать исключения как механизм управления потоком. Таким образом, если вы анализировали формат пользовательских данных, и он был искажен, вероятно, было бы лучше вернуть объект со статусом отказа и строкой (неверная строка данных 6, поз. 3), а не выбрасывать исключение MalformedDataException.

Но да, дорогой вопрос степени и перспективы. Для проектировщика ЦП промаха в кеше является катастрофой. К плюну, разделение дорого. Для меня доступ к жесткому диску дорог.

Смежные вопросы