Почему отлаженная программа замедляется так при использовании отладки записи метода?

Отвечая на мой вопрос, чтобы прояснить вопрос (благодаря всем комментариям):

Сначала я сделал пустую миграцию (python manage.py makemigrations --empty app_name)

Затем, к операциям добавьте функцию SQL:

migrations.RunSQL(
    ('CREATE OR REPLACE FUNCTION my_function() ...'),
    ('DROP FUNCTION IF EXISTS my_function();')
)

Две строки предназначены для переноса и немиграции SQL, подробнее читайте здесь: https://docs.djangoproject.com/en/2.1/ref/migration-operations/#runsql

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

33
задан JtR 15 April 2009 в 10:43
поделиться

3 ответа

The short answer is that execution runs through the interpreter when method entries are set. I don't think there is anyway around this...

This used to be the case for all code running in debug mode but it was enhanced in 1.4... now HotSpot works for 'full-speed' debugging except in the case of method entries and exits, watchpoints and when single stepping or in methods that contain breakpoints.

31
ответ дан 27 November 2019 в 18:30
поделиться

2 причины:

  1. он должен добавлять проверки для каждой записи метода (нет возможности настраивать только некоторые методы)
  2. вставка метода становится невозможной (поэтому небольшие методы работают в 10-100 раз медленнее)

то же самое касается профилировщиков и приложений .net

11
ответ дан 27 November 2019 в 18:30
поделиться

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

5
ответ дан 27 November 2019 в 18:30
поделиться
Другие вопросы по тегам:

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