Powiedziałbym, że jeśli twoja wstawka/aktualizacja/usuń modyfikuje zawartość jednej z tych list, powinieneś zażądać listy. Mam trochę buforowanych danych w mojej aplikacji i używam kolekcji struktury poniżej, aby je zachować. W ten sposób można łatwo wyczyścić całą pamięć podręczną, a kiedy pytam o konkretny datatable, sprawdzam, czy istnieje w pamięci podręcznej, która nie wygasła.
Protected Structure CachedDT
#Region "Local Variables"
Public TheDT As DataTable
Public TheExpirationTime As DateTime
Public TheUniqueIdentifier As String
#End Region 'Local Variables
End Structure
Protected cCachedDTs As Dictionary(Of String, CachedDT) = New Dictionary(Of String, CachedDT)
Te żyją w mojej klasie bazowej dla obiektów, które wysyłają zapytania do baz danych. Przykładem wykorzystania pamięci podręcznej DataTables jest:
<System.Diagnostics.DebuggerStepThrough> _
Public Overrides Function GetPermissionsSystem(ByVal SystemUserName As String) As DataTable
Try
Dim oCmd As New SqlCommand
Dim aDpt As New SqlDataAdapter
Dim aDst As New DataSet
Dim theCached As CachedDT
Dim theCacheName As String = "GetPermissionsSystem|" & SystemUserName
If cCachedDTs.ContainsKey(theCacheName) Then
theCached = cCachedDTs.Item(theCacheName)
If theCached.TheExpirationTime < DateTime.Now Then
cCachedDTs.Remove(theCacheName)
Else
Return theCached.TheDT
End If
End If
With oCmd
.Connection = MyBase.Conn
.CommandType = CommandType.StoredProcedure
.CommandTimeout = MyBase.TimeoutShort
.CommandText = Invoicing.GetPermissionsSystem
.Parameters.Add(GP("@SystemUserName", SystemUserName))
End With
aDpt.SelectCommand = oCmd
aDpt.Fill(aDst)
theCached = New CachedDT
With theCached
.TheUniqueIdentifier = theCacheName
.TheExpirationTime = DateTime.Now.AddSeconds(10)
.TheDT = aDst.Tables(0)
End With
cCachedDTs.Add(theCached.TheUniqueIdentifier, theCached)
Return aDst.Tables(0)
Catch sqlex As SqlException
MyBase.HandelEX(sqlex)
Catch ex As Exception
MyBase.HandleEX(ex)
Finally
MyBase.CloseConn()
End Try
End Function
W powyższym przykładzie, funkcja sprawdza pamięć podręczną, aby zobaczyć, czy odpowiedni obiekt istnieje. Jeśli tak, to zostanie zwrócone, zamiast ponownie trafiać do bazy danych. Na końcu świeży obiekt jest dodawany do pamięci podręcznej.
Wszystko, co musisz zrobić, to podać sposób usunięcia określonej listy z pamięci podręcznej. Następnie, po wykonaniu operacji wstawiania/aktualizowania/usuwania, upewnij się, że wyczyściłeś odpowiedni element.
Dobre pytania uzupełniające. –
"Czy dane mogą być nieaktualne? Jeśli tak, to jak długo?": Może 1 godzina, może 1 rok. Głównym problemem jest niestabilna dziedzina biznesu. – boj