在使用手动事务提交Django视图功能,我有:Python:这些例子中的一个会浪费更多的内存吗?
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的字符串可以立即进行垃圾收集吗?
是否有任何理由我想使用第一个版本(除了“它是少一行代码”)?
@恩啊,好点。我忘记了Django的'QuerySets'直到读取值时才被使用(或者它们是以'QuerySet'不支持的方式操纵的]。内存使用情况如何(而不是我的答案之后是否应该使用第二个版本的问题)? – orokusaki 2010-03-20 16:20:56