.net 要在类的新实例之间持久化的静态列表
我有一个VB.NET Windows服务,它实现了一个每分钟触发一次的计时器。 此计时器调用方法Execute。此方法创建类MyClass的实例,然后调用该类的方法DoWork。在DoWork方法中,我检查myStaticList是否存在。如果静态列表不存在(未初始化:nothing),则创建静态列表并存储一些参数。如果静态列表存在,那么我读取它上的值来做一些工作。我需要在MyClass的新实例之间持久化myStaticList列表。我怎么做?下面是代码片段.net 要在类的新实例之间持久化的静态列表,.net,vb.net,static,.net,Vb.net,Static,我有一个VB.NET Windows服务,它实现了一个每分钟触发一次的计时器。 此计时器调用方法Execute。此方法创建类MyClass的实例,然后调用该类的方法DoWork。在DoWork方法中,我检查myStaticList是否存在。如果静态列表不存在(未初始化:nothing),则创建静态列表并存储一些参数。如果静态列表存在,那么我读取它上的值来做一些工作。我需要在MyClass的新实例之间持久化myStaticList列表。我怎么做?下面是代码片段 Public Class MySer
Public Class MyService
Protected Overrides Sub OnStart(ByVal args() As String)
Dim serviceTimer As New Timer
serviceTimer.Interval = 60000
AddHandler serviceTimer.Elapsed, AddressOf OnTimedEvent
serviceTimer.Enabled = True
End Sub
Private Sub OnTimedEvent(ByVal source As Object, ByVal e As ElapsedEventArgs)
Dim serviceTimer As Timer = source
Try
serviceTimer.Stop()
Me.Execute()
Catch ex As Exception
' Do something...
Finally
serviceTimer.Start()
End Try
End Sub
Private Sub Execute()
Dim p As New MyClass()
p.DoWork()
End Sub
End Class
Public Class MyClass
Static myStaticList As List(Of MyAnotherClass)
Public Sub DoWork()
' Do the work
If IsNothing(myStaticList) Then
' Create and do something with myStaticList, store values, etc.
Else
' Do something with my existing myStaticList, read values and do something
End If
End Sub
End Class
一个选项是将
myStaticList
存储为MyService
的成员,作为私有的非静态成员
它需要将一个填充列表的方法移动到MyService。
它需要在MyService
中实例化列表,这些列表仍然可以在MyClass
中进行更改
然后,构造函数可以将该列表传递到
MyClass
实例中,该构造函数将分配一个列表。一个选项是将myStaticList
存储为MyService
的成员,作为私有的非静态成员
它需要将一个填充列表的方法移动到MyService。
它需要在MyService
中实例化列表,这些列表仍然可以在MyClass
中进行更改
然后,构造函数可以将该列表传递到
MyClass
实例中,该构造函数将分配一个列表。另一个选项是使myStaticList不是“静态”而是“共享”:
实际上,它可能不应该被称为myStaticList,而应该被称为mySharedList;)
该列表将在MyClass的所有实例之间共享,并在MyClass实例死亡后保留。另一个选项是使myStaticList不是“静态”而是“共享”: 实际上,它可能不应该被称为myStaticList,而应该被称为mySharedList;)
该列表将在MyClass的所有实例之间共享,并在MyClass实例死亡后保留。
shared
是将对象与类(而不是特定实例)关联的关键字。考虑到您使用的是共享可变状态,您需要非常小心地确保您的工作流受到适当的锁保护(您需要确保,除了构造列表的代码之外,没有任何东西可以看到部分填充的列表,并且您需要确保不要尝试同时在两个位置构造列表).Lazy
可能有帮助,它有一些锁定基础设施。另外,不要使用IsNothing,这是VB的VBA版本中的一个过时的兼容性函数(用于检查可能包含对象的Variant
s)。使用Is
和IsNot
运算符,例如,如果myStaticList为Nothing,则使用;如果myStaticList为Nothing,则使用或如果myStaticList为Nothing,则使用共享是将对象与类(而非特定实例)关联的关键字。您需要格外小心,以确保您的工作流是正确的由于您使用的是共享的可变状态,因此最近受到锁的保护(您需要确保除了构造列表的代码之外,没有任何东西可以看到部分填充的列表,并且您需要确保不尝试同时在两个位置构造列表).Lazy
可能有帮助,它有一些锁定基础设施。另外,不要使用IsNothing,这是VB的VBA版本中的一个过时的兼容性函数(用于检查可能包含对象的Variant
s)。使用Is
和IsNot
运算符,例如,如果myStaticList为Nothing,则使用;如果myStaticList为Nothing,则使用。
Private Shared myStaticList As List(Of MyAnotherClass)