मैं कहूंगा कि, यदि आपका सम्मिलित/अद्यतन/हटाएं उन सूचियों में से किसी एक की सामग्री को संशोधित करता है, तो आपको सूची की आवश्यकता होनी चाहिए। मेरे पास मेरे ऐप में कुछ कैश किए गए डेटाटेबल्स हैं, और मैं उन्हें बनाए रखने के लिए नीचे दी गई संरचना का संग्रह उपयोग करता हूं। इस तरह, पूरे कैश को साफ़ करना आसान है, और जब मैं किसी विशेष डेटाटेबल के लिए पूछता हूं तो मैं यह देखने के लिए जांच करता हूं कि कैश में कोई मौजूद है या नहीं।
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)
ये क्वेरी बेस डेटाबेस में ऑब्जेक्ट्स के लिए मेरी बेस क्लास में रहते हैं। कैश की गई datatables का उपयोग करने का एक उदाहरण है:
<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
उपरोक्त उदाहरण में, समारोह कैश की जाँच करता है देखने के लिए एक उपयुक्त वस्तु मौजूद है या नहीं। यदि ऐसा होता है, तो डेटाबेस को फिर से मारने के बजाए वह वापस आ जाता है। अंत में, ताजा वस्तु कैश में जोड़ दी जाती है।
आपको केवल कैश से किसी विशेष सूची को हटाने का कुछ साधन प्रदान करना होगा। फिर, जब आप कोई सम्मिलित/अद्यतन/हटाते हैं, तो सुनिश्चित करें कि आप उचित आइटम साफ़ कर लें।
स्रोत
2010-11-12 16:11:52
अच्छा अनुवर्ती प्रश्न। –
"क्या डेटा बाँध सकता है? यदि हां, तो कब तक?": शायद 1 घंटा, शायद 1 वर्ष। मुख्य समस्या एक अस्थिर व्यापार डोमेन से आता है। – boj