簡體   English   中英

重置vb.net結構的最快方法是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM