什么是重置vb.net结构的最快方法?

时间:2018-01-08 02:54:42

标签: .net vb.net

例如......

    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仅适用于阵列。

3 个答案:

答案 0 :(得分:1)

如果只是新手呢?

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.

答案 1 :(得分:1)

我只是运行一个简单的基准来看看哪种方法最快。

如果您的任何变量都是引用类型,我建议您创建一个类。

假设结构中的所有变量都是值类型,我比较了以下两种方式。

我使用Double类型的27个变量创建了自己的值类型结构,并在结构中编写了一个方法,将每个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)

执行子1000000000次大约需要21秒,而执行New分配1000000000次需要24秒才能在我的电脑上完成。所以有一个明显的区别,但是你的代码不会重复变量,这取决于个人品味。内存消耗没有显着差异,因此也不是考虑因素。

出于兴趣,我将结构更改为一个类,根据Microsoft的推荐方法,如果数据占用超过16个字节的内存,则再次运行基准测试。这个时间分别花了大约19秒31秒,第二个循环使用了几兆兆字节的内存。

所以......真的是你。

答案 2 :(得分:0)

您可以将其委托给函数或子程序 - 但要了解是否要调整原始数据(第一个示例 - 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,这使您的主代码看起来更整洁。