我有一个.NET(vb.net)4.6网站应用程序,该应用程序跟踪整个大学中用户的机密。有些秘密比其他秘密更重要。
因此,为了跟踪所有用户的安全性,我不断地对自己编写的类进行检查,该类检查值以确保它们正确。
因此,许多网页都实例化了一个名为SecretChecker的类,如下所示:
Public isSecure As SecretChecker
isSecure = New SecretChecker(ds)
实例化后,SecretChecker会检查所有用户机密(可能在1000秒钟之内),并按如下方式检查它们: SecretChecker.vb:
Public Sub New(ByVal secretDataSet As DataSet)
Public userSecretsList As DataTable = Nothing
userSecretsList = secretDataSet.Tables("userSecretsList")
With userSecretsList .Rows(0)
currentUserID = .Item(0)
End With
Dim tempList As DataTable = userSecretsList .Copy
If IsCurrentUser(currentUserID) Then
For Each dr As DataRow In tempList.Rows
secretID = dr("secretID")
If IsSecretForever(secretID)
dr("isSecretForver") = 1
dr.AcceptChanges()
End If
If IsLimitedLifetime(secretID)
dr("isSecretLimited") = 1
dr.AcceptChanges()
End If
Next
tempList.AcceptChanges()
userSecretsList = tempList
End If
End Sub
所以这实际上可以正常工作。但是,如果我有20多个用户,则Web服务器开始陷入瘫痪,最终不堪重负,用户开始看到连接错误。
我认为真正的问题是For / Next循环。
我认为最好不要在每次使用此类时都遍历数据表。
实际上,我认为最好是在用户登录时检查一次,然后以某种方式将其保存在内存中。
因此,即使我当前的方法可行,我仍然认为效率很低。
是否有一种方法可以让Web应用程序知道当前用户已经检查过数据表,以便在我实例化该类时,它不会每次都通过For / Next循环运行?
谢谢!