在使用手動事務提交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