0
우리 ASP.Net 응용 프로그램은 응용 프로그램 전체에서 사용되는 다양한 전역 설정을 사용합니다. 설정은 키/값 쌍으로 데이터베이스에 저장됩니다.HttpRuntime.Cache는 ASP.Net의 전역 설정을 저장하는 가장 좋은 방법입니까?
응용 프로그램 시작 이벤트에서이 개체를 HttpRuntime.Cache
개체로로드 한 다음 필요에 따라 사용합니다. 모든 설정은 클래스를 통해 처리됩니다. 다음은 클래스에 대한 간단한 코드입니다.
Public Class ConfigClass
' Other variables, properties & methods removed for clarity
' Functions in DAL are not shown here
' Called from Application Start event
Public Shared Sub LoadAppConfig()
Dim lCfg As DataTable = DAL.GetDataTable("Select ConfigID, Value from AppConfig Order By ConfigID")
If lCfg IsNot Nothing Then
For li_Lp As Integer = 0 To lCfg.Rows.Count - 1
HttpRuntime.Cache.Add(lCfg.Rows(li_Lp)("ConfigID").ToString, lCfg.Rows(li_Lp)("Value").ToString, Nothing, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, Caching.CacheItemPriority.NotRemovable, Nothing)
Next
lCfg = Nothing
End If
End Sub
' Returns the value of a single setting
Public Shared Function GetAppConfig(ByVal as_ConfigID As String) As String
If HttpRuntime.Cache(as_ConfigID) Is Nothing Then ' If nothing in cache, try DB
Dim lOBj As Object = DAL.ExecuteSQL("Select Value from AppConfig Where [email protected]", DAL.SQLType.sqlScalar, Nothing, "@ConfigID", as_ConfigID).Scalar
If lOBj Is Nothing Then ' If no such setting, return empty string
Return String.Empty
Else ' If found, add to cache and return
HttpRuntime.Cache.Add(as_ConfigID, lOBj.ToString, Nothing, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, Caching.CacheItemPriority.NotRemovable, Nothing)
Return lOBj.ToString
End If
Else
Return HttpRuntime.Cache(as_ConfigID).ToString
End If
End Function
' Method to delete a setting
Public Shared Sub DeleteAppConfig(ByVal as_ConfigID As String)
If DAL.ExecuteSQL("Delete From AppConfig Where [email protected]", DAL.SQLType.sqlNQ, Nothing, "@ConfigID", as_ConfigID).IsSuccess Then HttpRuntime.Cache.Remove(as_ConfigID)
End Sub
End Class
코드는 정상적으로 작동하며 아무런 문제가 발생하지 않았습니다. 응용 프로그램이 시작될 때 캐시에 약 30 개의 설정이로드됩니다.
"글로벌"설정을 저장하고 액세스하는 더 좋은 방법이 있습니까? 나는 이것을 어떻게해서든지 향상시킬 수 있습니까?
전역 설정은 파일이나 데이터베이스에 저장해야합니다. 나머지는 "전역"이 아니지만 많은 인스턴스가 중단 될 수 있습니다 - asp.net 풀을 설정 한 방법에 따라 달라집니다. – Aristos
예,이 경우 데이터베이스에 저장됩니다. 그러나 모든 설정에 대해 데이터베이스를 치는 것을 피하기 위해 HttpRuntime 캐시에로드 한 다음 캐시를 사용하여 설정을 읽습니다. – navigator
전역 설정이 전혀 변경되지 않으면 (다음 풀을 다시 시작할 때까지) 캐시를 사용할 수 있습니다. – Aristos