2012-04-14 59 views
0

我不知道是否減少變量的數量將大大節省或釋放內存。有時我會在可讀代碼或性能之間撕裂。通過減少變量的使用來保存或釋放內存?

例如在紅寶石,是更好的代碼此:

def touch_updated_at 
    a = self.model_name 
    a.touch 
    end 

或該:

def touch_updated_at 
    self.model_name.touch 
    end 

以在考慮到這個函數是在模型或控制器僅使用。無需通過它來查看。請指教。

謝謝。

回答

1

這取決於這些變量的數量。通常情況下,你會發現兩種情況都沒有區別。

1

我不是任何Ruby解釋器的實現者,但我認爲他們完全一樣。

臨時局部變量不可能在之前被垃圾收集,無論它是否被命名。

除非a實際上是一個屬性,當然。

如果您想更改此代碼的速度或內存使用情況,請不必擔心它的外觀以及它的功能。

1

實際對象可能會比引用它們的變量對內存有更大的影響。

變量的壽命是由它的範圍確定:

  • 本地
  • 封閉
  • 對象
  • 全球

但是,對象只有在引用它的所有變量都消失後才能被垃圾收集器釋放。而且,他們可能會比參考消耗更多的內存。

您可以將變量看作標識對象的數字。他們使用的內存很小,可以忽略不計。我想解釋者可能也會優化它們。

def touch_updated_at 
    model_name.touch 
end 

即使這種用法不會顯著提高內存使用,它簡潔得多。