2011-04-27 43 views
8

在.NET.NET Visual Basic中,程序員可以聲明一個字符串爲特定的寬度。例如,我知道一個社會安全號碼(在美國)總是十一個字符。所以,我可以宣佈,將存儲的社會保障號碼爲十一字符串像這樣的字符串:VB6 - 在VB6中使用固定寬度的字符串是否有任何性能優勢?

Dim SSN As String * 11 

我的問題是:這是否創建任何類型的性能優勢將要麼使代碼的運行速度或者使用更少的內存?另外,將固定長度的字符串以不同的方式分配到內存中(,即:在堆棧中而不是在堆中)?

+1

使用該功能進行數據驗證,而不是性能優化。 – JohnFx 2011-04-27 04:15:18

+2

我決定做一些基準測試。我發現在我的代碼中使用固定寬度的字符串實際上導致了15%的性能下降** - 也就是說,平均執行時間延長了15%。我仍然無法找到一種方法來確定變量是否分配在堆棧或堆上,並且我不知道VB6中的一種方法。至於數據驗證,這似乎是一個不好的驗證方法。我也許可以理解爲什麼從VB.NET中刪除了這個功能。 – 2011-04-27 15:24:22

+0

偉大的問題;很好的評論,丹尼爾! – CaBieberach 2011-11-22 10:23:23

回答

4

在VB6或唯一的時間比較早,我不得不使用時

固定長度的字符串是通常所見固定長度的字符串與API調用一起工作。在長度比預期更長的時候,不通過固定長度的字符串會導致無法解釋的錯誤,有時甚至比預期的短。

如果您正在審閱並計劃在應用程序中更改該屬性,請確保沒有將字符串傳遞給API或外部DLL,並且該程序不需要輸出固定長度的字段,例如與許多AS/400導入程序。

我個人從來沒有看到性能差異,因爲我正在運行300k +記錄的循環,但沒有選擇,只能提供和使用固定長度的工作。然而,VB喜歡默認使用未定義的長度,所以我會想象固定長度下的性能會更低。

嘗試編寫一個測試應用程序來執行兩個字符串的基本串聯,並讓它在函數上循環50k次。時間兩者之間的差異有一個未定義的長度,另一個是固定的。

+0

使用固定長度字符串的另一個原因是在將固定長度記錄讀寫到文件時。例如一組類型。 – 2013-06-27 07:52:04

5

更新

沒有,有沒有性能優勢;但是即使有性能上的好處,它也是一個微型優化(除非你在一個循環中調用了很多(例如數百萬次))。

此外,固定長度的字符串通常佔用比變長的字符更多的內存if你沒有使用整個長度(除非非常短的固定長度字符串)。

與往常一樣,在使代碼難以維護之前,您應該仔細地進行基準測試。一些COM API的交互,或建模域約束時(比如你給一個SSN的例子)

相關問題