Python:这些示例中的一个会浪费更多内存吗?

时间:2010-03-20 16:14:13

标签: python django memory-management

在使用手动事务提交的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 个答案:

答案 0 :(得分:3)

你说,“在这个功能中,不会有很多例外”。这可能不是真的。请记住,查询集是从数据库中延迟提取的,因此事实上,很多数据库活动都可以在render_to_response调用中。

我会使用第二种风格。从某种意义上说,如果render_to_response出现问题,您希望事务回滚。

参考资料几乎没有成本。不要试图优化它们。正确性比绝对最小内存占用更重要。