2013-03-12 6 views
1

Мы разработали приложение для интенсивной работы в сети на базе Windows C++, которое, по-видимому, медленное во время обмена данными.Профилировщик для Windows C++ (консольное сетевое приложение)

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

Я попытался использовать «Performance Tool», доступный в VS 2010, но он сбрасывает момент запуска, чтобы профилировать приложение.

Error Message: Injection of Runtime library failed. 

Кроме того, я попытался с помощью очень сонным, но я не могу видеть мои функции в ней, может быть, потому что он не может указывать на исходный код (но не уверен, может быть я mightnot использовать его правильно)

Может кто-нибудь предложить хорошие свободно доступные профилировщики для консольного приложения Windows C++?

Основываясь на оценке, мы продолжим работу с коммерческой версией профилировщика.

Большое спасибо в Advance.

ответ

4

Если вы используете компьютер на базе Intel, я бы использовал VTune. Если это на машине AMD, CodeAnalyst - аналогичный продукт.

Я считаю, что VTune доступен на пробной версии. CodeAnalyst доступен бесплатно.

Эти инструменты не основаны на консоли, но они будут работать для профилирования консольных приложений.

+0

Усилитель Intel® VTune ™ XE для Windows – RDX

0

Наш C++ Profiler инструмент должен работать.

Не важно, как ваше приложение выполняет ввод-вывод (например, «на основе консоли»). Он обрабатывает огромные системы файлов. Он также обрабатывает диалекты GNU и MS C++, а также C++ 11.

Коммерческий. (Я сомневаюсь, что вы найдете бесплатный профайлер, который работает для MS Visual C++).

+0

может использоваться для оценки, прежде чем мы планируем приобрести – RDX

+0

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

1

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

Пусть проблемы, когда фиксированы, спасут эти проценты:

enter image description here

Просто найти один из них даст вам определенное количество SpeedUp. Как если бы вы только нашли A, это даст вам ускорение 1/(1-0,3) = 1,43 или 43%. Если вы сделали это, вы могли бы, как и большинство людей, быть счастливыми и останавливаться. Однако, если вы продолжите, а также найдете B, ваше полное ускорение будет 1/(1-0.51) = 2.04 или 104%. Это намного больше, чем 43%, хотя B было меньше A. Фиксация C приводит вас в 2,92 раза быстрее, а D - в 4,2 раза быстрее.

Что? Устранение меньших проблем имеет более высокий выигрыш? Они могут, потому что факторы ускорения составляют. Фиксация A и B в этом порядке дает вам 1.43 * 1.43 = 2.04. Если вам удастся исправить их в обратном порядке, вы получите 1.27 * 1.61 = 2.04

Каждый раз, когда вы что-то исправляете, другие проблемы становятся больше, процентны и легче найти, а ускорения накапливаются, доходность инвестиций. К тому времени, когда вы исправите A, B, C, D и E, один слева - F, и это не 5%, это 30%. Исправить все, и теперь вы в 8,5 раз быстрее! Однако, если вы пропустили один, например D, потому что ваш инструмент профилирования не может его выставить, вы всего в 4,5 раза быстрее.

Это цена, за которую вы платите за то, что не нашли проблемы.

Вот почему я полагаюсь на a manual technique, потому что, относительно профайлеров, он находит все проблемы, которые они находят, и обнаруживает те, которые у них нет. Профилировщики часто занимаются периферийными проблемами, такими как точность измерений, что не помогает найти проблемы. Если вам интересно, почему, here's the math.

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