Python: один из этих примеров тратит больше памяти? - PullRequest
0 голосов
/ 20 марта 2010

В функции просмотра Django, которая использует фиксацию транзакций вручную, у меня есть:

context = RequestContext(request, data)
transaction.commit()
return render_to_response('basic.html', data, context)  # Returns a Django ``HttpResponse`` object which is similar to a dictionary.

Я думаю, что лучше сделать это:

context = RequestContext(request, data)
response = render_to_response('basic.html', data, context)
transaction.commit()
return response

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

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

Если экземпляр HttpResponse уже находится в памяти (в точке render_to_response()), то сколько стоит другая ссылка? Когда функция завершается, разве ссылка (переменная response) не исчезает, так что, когда Django завершит преобразование HttpResponse в строку для вывода, Python может сразу же собрать ее?

Есть ли причина, по которой я бы хотел использовать первую версию (кроме «Это на 1 строку кода меньше»)?

1 Ответ

3 голосов
/ 20 марта 2010

Вы говорите: "В этой точке, скорее всего, не будет много исключений". Это не может быть правдой. Имейте в виду, что наборы запросов лениво извлекаются из базы данных, поэтому на самом деле большая часть вашей активности базы данных может быть внутри вызова render_to_response.

Я бы использовал второй стиль. Это более правильно в том смысле, что если что-то пойдет не так в render_to_response, вы захотите откат транзакции.

Список литературы почти ничего не стоит. Не пытайтесь оптимизировать их. Корректность важнее абсолютного минимального объема памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...