2014-12-01 2 views
0

개체를 캐시 할 예정입니다. http://msdn.microsoft.com/en-us/library/ms227644(v=vs.80).aspx캐싱 데이터 집합 전달 값 또는 참조?

if (Cache["customerDataSet"] == null) 
{ 
    dataSet = DataSetConfiguration.CustomerDataSet; 
    Cache["customerDataSet"] = dataSet; 
} 
else 
{ 
    dataSet = (DataSet)Cache["customerDataSet"]; 
} 

에서 명백한 인기 체크 전에 읽을 정책은 DataSet 개체의 존재를 보호합니다. dataSet은 객체에 대한 참조 일 뿐이므로 캐시의 실제 데이터 세트는 밀리 초 단위로 이동할 수 있습니다 (예 : foreach 루프 중간). 만약 그렇다면,

dataSet = ((DataSet)Cache["customerDataSet"]).Copy(); 

이 더 안전해야합니다. .Copy() 도중에 캐시가 만료 될 수 있습니다. 내가 옳은가 아니면 이것은 단지 지나치다는 생각인가?

+0

마지막 문장은 참입니다.) –

+0

캐시가 일시적이므로 ApplicationState를 사용했지만 캐시가 더 잘 작동 할 수 있다고 생각합니다. –

답변

0

간단한 테스트 : 캐시가 사라지고 데이터 세트 d는 여전히 액세스 할 때 DO-동안이 종료

DataSet d = (DataSet)Cache["myKey"]; 
int i = 0; 
do 
{ 
    i++; 
} while (Cache["myKey"] != null); 

Label1.Text = (Cache["myKey"] == null ? "gone with wind " : null) + d.Tables[0].Rows.Count.ToString() + " took: " + i.ToString(); 

. 당신은 옳았습니다.

관련 문제