2014-03-30 25 views
0

考慮這個人爲的例子:.NET代碼的格式,「襯」

public static string ContrivedOne(Guid id, string host) 
{ 
    Contact person = new Contact(host, id); 
    DbRow record = new DbRow(host); 
    string msg = string.Format("Hi, {0}", host); 
    StuffItems stuff = GetStuff(id); 
    string result = record.Save(person, stuff, msg); 
    return result; 
} 


public static string ContrivedOner(Guid id, string host) 
{ 
    return new DbRow(host).Save(new Contact(host, id), GetStuff(id), string.Format("Hi, {0}", host)); 
} 

所有的事情都是平等的,不考慮可讀性等,會出現通常在它們之間的性能差異?

+0

最有可能的是,它不會。 – AgentFire

+0

雖然技術上可能由於緩存而存在微小的差異,並且這些方法以不同的順序被調用,但實際上,如果沒有在實踐中進行實際測試,Afact也不會被認爲一致。 –

回答

1

我可以看到的性能的主要區別在於什麼時候放在堆棧上。

在第一個示例中,調用了每個函數,並將其返回值放入堆棧中以形成局部變量。在第二種情況下,「保存」函數調用可能會被推送,然後參數中的每一個(仍然存儲到一個隱藏的局部變量)。

所有這些細節都由編譯器決定。就實際(讀取,顯着)性能差異而言,您不會看到任何東西。

+0

證實了我的懷疑:有時編譯器會提出一些「聰明」/更快的事情,有時候不會。所以,就像Joachim所建議的那樣,你必須測試每個案例。但總的來說,潛在收益並沒有抵消這種痛苦。謝謝。 – esjr