[英]what's the fastest way to reset a vb.net Structure?
例如...
PUBLIC Structure System_Scoring_Structure
dim daily_evaluation_score as double
dim weekly_evaluation_score as double
dim monthly_evaluation_score as double
dim yearly_evaluation_score as double
End Structure
..使用這種結構后,我想將每個變量重置為零,然后再次將其重新用於其他數據記錄進行處理。 我能想到的就是將每個變量設置為零。 (我的實際結構有很多變量。)
Redim和Erase僅適用於陣列。
剛剛更新怎么樣?
Dim scores As System_Scoring_Structure = New System_Scoring_Structure
' TODO: Set the scores members and use it somewhere...
' ...
' now zero the structure out..
scores = New System_Scoring_Structure
' it's reset and ready to be filled again.
我只是運行了一個簡單的基准測試,看看哪種方法最快。
如果您的任何變量是引用類型,那么我肯定會建議您創建一個類。
假定結構中的所有變量都是值類型,我比較了以下兩種方法。
我用27個Double
類型的變量創建了自己的值類型結構,並在該結構中編寫了一個方法,將每個double都設置為0,稱為.Reset
然后,我用幾個秒表運行此代碼,以了解完成1000000000次所需的時間,以及簡單地將其分配為該結構的新實例所花費的時間。
我的結構被稱為test
-是的,全部都用大寫...
Dim t1 As New Stopwatch
Dim s As test
Dim s1 As test
t1.Start()
For i As Integer = 1 To 1000000000
s.reset()
Next
t1.Stop()
Dim t2 As New Stopwatch
t2.Start()
For i As Integer = 1 To 1000000000
s1 = New test
Next
t2.Stop()
MessageBox.Show(t1.ElapsedMilliseconds & " " & t2.ElapsedMilliseconds)
執行sub 1000000000次大約需要21秒,而執行New
分配1000000000次需要24秒。 因此,有一個明顯的區別,但是您的代碼不會將變量重設置得太多,這取決於個人喜好。 內存消耗沒有顯着差異,因此也無需考慮。
出於興趣,我將結構更改為一個類,根據Microsoft的建議,如果數據占用16個字節以上的內存,並再次運行基准測試,則可以創建此類。 這個時間分別花費了大約19秒和31秒,第二個循環使用了幾兆字節的內存。
所以..取決於您。
您可以將其委派給函數或子例程-但要了解是要調整原始數據(第一個示例-ByRef),還是要用新副本替換原始數據(第二個示例)。
Private sub Reset_system_scoring(ByRef sss as System_Scoring_Structure)
sss.daily_evaluation_score = 0
sss.weekly_evaluation_score = 0
[...]
end sub
要么
Private function Reset_system_scoring() as System_Scoring_Structure
dim sss as System_Scoring_Stucture
sss.daily_evaluation_score = 0
sss.weekly_evaluation_score = 0
[...]
return sss ' OK - this is really ugly code.
end sub
正如上面所提到-再New
荷蘭國際集團的結構也能工作-這是假定所有變量里面將默認為0,除非你有特別的構造。
還應考慮將結構重構為一個類。 您可以使用它來存儲基本數據,然后進行內部計算以獲取匯總數據。 這也將允許您使用各種方法進行編碼,包括Reset
,這會使您的主代碼看起來更整潔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.