C#, Как я могу определить, где медленные части моего кода?

Для быстрого создания Spark-Context

Протестировано на EMR:

  1. cd /usr/lib/spark/jars/; zip /tmp/yarn-archive.zip *.jar
  2. cd path/to/folder/of/someOtherDependancy/jarFolder/; zip /tmp/yarn-archive.zip jar-file.jar
  3. zip -Tv /tmp/yarn-archive.zip для целостности теста и расширенной отладки
  4. , если yarn-archive.zip уже существует в hdfs, тогда hdfs dfs -rm -r -f -skipTrash /user/hadoop/yarn-archive.zip hdfs dfs -put /tmp/yarn-archive.zip /user/hadoop/ else hdfs dfs -put /tmp/yarn-archive.zip /user/hadoop/
  5. --conf spark.yarn.archive="hdfs:///user/hadoop/yarn-archive.zip" использует этот аргумент в spark-submit

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

Я понял, что он может сэкономить ваше время на 3-5 секунд, это время также зависит от количества узлов в кластере , Больше узлов, больше вы экономите время.

16
задан andynormancx 16 February 2009 в 16:28
поделиться

10 ответов

Хорошо, downvote время...

Профилировщики являются великими для измерения.

, Но Ваш вопрос был, "Как я могу определить, где медленные части моего кода?".

, Который является другой проблемой. Это - диагноз, не измерение.

я знаю, что это не популярное представление, но это верно.

Это похоже на бизнес, который пытается сократить издержки.

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

Другой подход (вверх дном) должен войти наугад в офис, выбрать кого-то наугад и спросить их, что они делают в тот момент и (значительно) почему, подробно.

Делают это несколько раз.

, Именно это Harry Truman сделал при внезапном начале Второй мировой войны, в американской военной промышленности, и сразу раскрыл крупное мошенничество и отходы путем посещения нескольких сайтов. , Который является диагнозом.

В коде можно сделать это очень простым способом: "Приостановите" его и спросите его, почему это тратит тот конкретный цикл. Обычно стек вызовов говорит Вам почему, подробно.

Делают это несколько раз.

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

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

Для ответа на вопрос:

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

ДОБАВИЛ: RedGate ANTS добирается там. Это может дать Вам стоивший с методической точностью, и это довольно элегантно. Таким образом, если Вы находитесь в.NET, и можете сэкономить 3 числа и не возражаете ожидать вокруг для установки & изучите это, это может сказать Вам большую часть того, что Ваша клавиша Pause может сказать Вам и быть намного более симпатичной об этом.

19
ответ дан 30 November 2019 в 17:05
поделиться

Профилирование.

RedGate имеет продукт.
JetBrains имеет продукт.

8
ответ дан 30 November 2019 в 17:05
поделиться

Я использовал Профилировщика МУРАВЬЕВ, и я могу присоединиться к другим с рекомендацией.

цена НЕЗНАЧИТЕЛЬНА при сравнении ее с суммой dev часов, она сохранит Вас.

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

2
ответ дан 30 November 2019 в 17:05
поделиться

Для профилирования больших сложных приложений UI затем Вам часто нужен ряд инструментов и подходов. Я обрисую в общих чертах подход и инструменты, которые я недавно использовал на проекте улучшить производительность приложения.Net 2.0 UI.

, В первую очередь, я взял интервью у пользователей и работал через варианты использования сам для предложения списка целевых вариантов использования, которые выделили системы худшие области выполнения. Т.е. Я не хотел проводить n дни человека, оптимизируя функцию, которая почти никогда не была использована, но не очень медленная. Я хотел бы провести время, однако, оптимизируя функцию, которая была немного вяла, но вызвала 1000 времена день, и т.д.

, После того как варианты использования кандидата были определены, я оснастил свой код с моим собственным классом входа легкого веса (я использовал некоторые высокопроизводительные таймеры и пользовательское решение для входа потому что необходимая точность подмиллисекунды). Вы могли бы, однако, смочь сойти с рук log4net и метки времени. Причина я оснастил код, состоит в том, что иногда легче считать Ваши собственные журналы, а не вывод профилировщика. Мне были нужны оба по ряду причин (например, имеющие размеры разметки пользовательского элемента управления .NET не всегда простое использование профилировщика).

я затем выполнил свой оснащенный код с профилировщиком МУРАВЬЕВ и представил вариант использования. Путем объединения профиля МУРАВЬЕВ и моих собственных файлов журнала я очень быстро смог обнаружить проблемы с нашим приложением.

Мы также представили сервер, а также UI и смогли разработать разбивки в течение времени, проведенного в UI, время, проведенное на проводе, время, проведенное на сервере и т.д.

Также стоящий замечания, - то, что 1 выполнение не достаточно, и 1-е выполнение обычно стоит выбросить. Позвольте мне объяснить: загрузка ПК, сетевой трафик, состояние JIT-компиляции и т.д. может все влиять на время, которое займет конкретная операция. Простая стратегия состоит в том, чтобы измерить операцию n, времена (скажите 5), выбросьте самое медленное и самое быстрое выполнение, анализирование профилей remianing.

2
ответ дан 30 November 2019 в 17:05
поделиться

профилировщик Eqatec является милым мелким профилировщиком, который свободен и прост в использовании. Это, вероятно, не прибудет в какой-либо степени, "ничего себе", фактор профилировщика Муравьев с точки зрения функций, но это все еще - очень прохладный IMO и стоящий взгляда.

2
ответ дан 30 November 2019 в 17:05
поделиться

Используйте профилировщик . МУРАВЬИ стоят денег, но очень хороши.

1
ответ дан 30 November 2019 в 17:05
поделиться

ANTS Profiler очень хорош.

0
ответ дан 30 November 2019 в 17:05
поделиться

Учебное руководство/Объяснение Профилировщика МУРАВЬЕВ

0
ответ дан 30 November 2019 в 17:05
поделиться

Если Вы не хотите платить, более новые вириона VS идут с профилировщиком, но быть честным это не кажется очень хорошим. ATI/AMD делает свободного профилировщика..., но не очень удобный для пользователя (мне, я не мог вытащить полезную информацию из него).

совет, который я дал бы, к вызовам функции времени самостоятельно с кодом. Если они быстры, и у Вас нет таймера высокой точности, или вызовы варьируются по замедлению по ряду причин (например, каждый x вызовы, создающие некоторый кэш), пытаются выполнить каждого x10000 времена или что-то, то, деля результат соответственно. Это не может идеально подойти для некоторых разделов кода, но если Вы не можете найти хорошее, бесплатное, решение других производителей, в значительной степени, что оставляют, если Вы не хотите заплатить.

0
ответ дан 30 November 2019 в 17:05
поделиться

Еще одной опцией является Intel VTune.

0
ответ дан 30 November 2019 в 17:05
поделиться
Другие вопросы по тегам:

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