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