2009-06-01 135 views
3

我想問問那些關於代碼優化的vb.net專家。我的例子是VB.Net代碼優化?

a。

Dim lblEventCategory = CType(Me.gvSpecialEvent.Rows(e.NewEditIndex).FindControl("lblEventCategory"), Label) 

b。

Dim lblEventCategory As Label = CType(Me.gvSpecialEvent.Rows(e.NewEditIndex).FindControl("lblEventCategory"), Label) 

哪兩個更有效率是字母A?或字母B?

有人能幫我理解這些代碼嗎?

預先感謝

回答

0

第一個定義變量lblEventCategory作爲Variant類型。這通常比使用顯式類型的第二個更糟糕。 Variant類型是一種「全部捕獲」,可以安全地保存任何類型的變量,但是會丟失編譯器可能已經提供給您的所有類型安全和警告。同樣,Variant類型使用更多內存,並且在運行時會更慢,因爲需要對其執行轉換。

此外,方法調用將是「後期限制」 - 這意味着對這些方法的調用在運行時纔會被解析,當變量的類型已知時,調用將通過名稱進行。與使用顯式類型的情況相比,這通常是天文學上較慢的,其中調用可以「早期綁定」(即在編譯時)。

另一方面,Variant類型確實有它們的位置。如果您正在使用僅支持變體類型的VBScript語言進行交互,它們在OLE自動化(COM)編程中很有用。在這種情況下,將呼叫包裝到延遲綁定代碼中可能會比較明智,以便將Variant類型轉換爲呼叫邊界處的正確類型並將其轉換爲正確類型。

+0

不正確。在vb2008之前,第一個被定義爲對象類型,而不是變體。在vb2008中(假設Option Infer On)被定義爲一個標籤。 – ggf31416 2009-06-01 10:56:08

+0

在VB.NET中不存在變體類型。 – 2009-06-01 13:50:27

4

如果我們正在談論的.net 3.5比1800年信息說不是真的,因爲類型推斷將發生,編譯器將推斷類型,因此是類型安全。 所以.net 3.5 a和b是一樣的。

在Visual Studio 2008中,只需轉動Option Infer On或Off即可查看區別。

在.NET 3.5之前,不會發生類型推斷,它將使用變體類型或者使用對象類型。 所以在pre.Net 3.5中A和B是不一樣的。

+2

vb2008類型推斷是一種語言功能,與框架的版本無關。如果.net 2.0被定位,類型推斷不會改變。 – ggf31416 2009-06-01 11:03:08

2

在.NET 3.5中Dim x = value與C#var x = value相同;編譯器會推斷出類型,因此在運行時兩者相等。