0
개체 (DataSet)를 캐시하고 올바른 시점에서 만료 될 때 응용 프로그램의 주요한 난점없이 다시 채워 넣을 올바른 방법은 무엇입니까? 응용 프로그램은이 데이터를 읽기 전용으로 사용합니다.캐싱 중에 캐싱 및 대기 중입니까?
개체 (DataSet)를 캐시하고 올바른 시점에서 만료 될 때 응용 프로그램의 주요한 난점없이 다시 채워 넣을 올바른 방법은 무엇입니까? 응용 프로그램은이 데이터를 읽기 전용으로 사용합니다.캐싱 중에 캐싱 및 대기 중입니까?
문제가 있다고 생각되면 실제로 다시 채우는 데 약간의 시간이 걸릴 수 있으며 약간 오래된 데이터에 대해 걱정하지 않으셔도됩니다. 분명히
class MyClass
{
private DataSet cached;
private Thread repopulateThread;
public DataSet GetDataSet() {
lock(this) {
if (/*cached has expired*/ && populateThread == null) {
populateThread = new Thread(PopulateCachedValue);
populateThread.Start();
}
return cached;
}
}
private void PopulateCachedValue() {
DataSet ds = /* fetch new DataSet */
lock(this) {
cached = ds;
}
populateThread = null;
}
}
, 이것은 단지 의사,하지만 당신은 무슨 일이 일어나고 있는지 볼 수 있어야합니다 :이 경우, 당신은 아마이 작업을 수행 할 수있는 캐시 값이 만료 될 때, 우리는을 가져 오기 위해 새로운 스레드를 회전 새로운 값을 반환하지만 해당 스레드가 계속 작동하는 동안에도 캐시 된 값인 을 계속 제공합니다.
마지막으로 스레드가 작업을 마쳤 으면 이전 캐시 값을 새 값으로 바꿉니다.