2014-12-29 3 views
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 개의 설정이로드됩니다.

"글로벌"설정을 저장하고 액세스하는 더 좋은 방법이 있습니까? 나는 이것을 어떻게해서든지 향상시킬 수 있습니까?

+0

전역 설정은 파일이나 데이터베이스에 저장해야합니다. 나머지는 "전역"이 아니지만 많은 인스턴스가 중단 될 수 있습니다 - asp.net 풀을 설정 한 방법에 따라 달라집니다. – Aristos

+0

예,이 경우 데이터베이스에 저장됩니다. 그러나 모든 설정에 대해 데이터베이스를 치는 것을 피하기 위해 HttpRuntime 캐시에로드 한 다음 캐시를 사용하여 설정을 읽습니다. – navigator

+0

전역 설정이 전혀 변경되지 않으면 (다음 풀을 다시 시작할 때까지) 캐시를 사용할 수 있습니다. – Aristos

답변

0

현대적인 데이터베이스 시스템은 자주 요청 된 데이터를 메모리에 캐싱하기에 매우 좋습니다. 그래서 많은 메모리를 가진 시스템에서는 별 차이가 없을 수도 있습니다.