2011-03-02 73 views
0

我有一個對象模型,我用來填充查詢的結果,然後我傳遞給一個gridview。做數據類型選擇會影響性能嗎?

事情是這樣的:

public class MyObjectModel 
{ 
    public int Variable1 {get;set;} 
    public int VariableN {get;set;} 
} 

假設變量1保持計數的價值,我知道,伯爵將永遠不會變得非常大(即在某一天即將到來的約會的數量)。現在,我已經把這些數據類型設置爲int。假設有人預定每天少於255次預約是安全的。將數據類型從int更改爲byte會對性能產生多大影響?這是否值得麻煩?

謝謝

回答

3

不,性能不受影響太大。

對於每個int,您將保存3個字節,或總共6個具體示例。除非您擁有數百萬個這樣的內存,否則內存中的節省非常少。

不值得麻煩。


編輯:

只是爲了澄清 - 我的答案是明確有關示例代碼。在很多情況下,選擇會有所作爲,但這是一個規模問題,需要性能測試來確保正確的結果。

要回答@ Filip的評論 - 編譯應用程序與64位並選擇一個孤立的數據類型有區別。

+0

這是有原因的Visual Studio僅是在一個32位版本,因爲根據MS,編譯它的64位使得它慢了很多。因此,它可能會影響性能,具體取決於您的操作。 – 2011-03-02 21:29:03

+0

@Filip - 非常真實。在這種情況下,我沒有看到很大的區別。 – Oded 2011-03-02 21:30:33

+0

http://english.stackexchange.com/questions/315/effect-vs-affect – SLaks 2011-03-02 21:32:14

1

它會影響爲該變量分配的內存量。以我個人的觀點來看,我認爲這不值得在案例中遇到麻煩。

如果有大量的變量或數據庫表,你真的可以保存,那麼是的,但不是在這種情況下。

此外,經過多年的維護編程,我可以放心地說,假設任何事物的上限是很少安全的。如果由於試圖節省瑣碎的資源而導致一些糟糕的維護程序員不得不重新編寫應用程序,那麼即使有遠程機會,這也是不值得的。

1

使用小於intSystem.Int32)的整數變量將不會提供任何性能優勢。這是因爲在執行操作之前,CLR中的大多數整數操作都會將變量提升爲intint被認爲是開發CLR的系統上的「自然」整數大小。

考慮下面的代碼:

for (byte appointmentIndex = 0; appointmentIndex < Variable1; appointmentIndex++) 
    ProcessAppointment(appointmentIndex); 

在編譯代碼,所述比較(appointmentIndex < Variable1)和增量(appointmentIndex++)將(最可能)使用32位整數來執行。即使優化器使用較小的數據類型,CPU本身也需要額外的工作才能使用較小的數據類型。

如果要存儲的值的數組,然後使用一個較小的數據類型可以幫助節省空間,這可能會給一些scenerios性能上的優勢。

0

流行的看法相反使用的Int32,使您的數據類型小不會使訪問速度更快。實際上,它是較慢的。看看bool,它實現爲int

這是因爲在內部,您的CPU可以使用原生字大小的寄存器(最近32/64位),並且您迫使它無故來回地轉換數據(只有在編寫導致記憶,但它仍然是你可以輕易避免的懲罰)。

與整數寬度擺弄隻影響存儲器訪問和高速緩存具體。這是你只能通過分析應用程序並特別查看頁面錯誤計數器才能知道的東西。

0

我與其他答案同意,性能不會是值得的。但是如果你打算這麼做的話,請使用short而不是byte。我的經驗法則是挑選您想象的最高數字,乘以10,然後以此作爲選擇您的價值的基礎。所以如果你無法想象一個高於200的值,那麼以2000爲基礎,這意味着你需要一個short