ASP.NET MVC 3 (.NET 4) 웹 응용 프로그램이 있습니다.비동기 스레드를 실행 취소하고 캐시에 데이터 저장
이 응용 프로그램은 Oracle 데이터베이스에서 데이터를 가져 와서 일부 정보를 다른 Sql 데이터베이스와 혼합합니다.
많은 테이블이 함께 결합되어 많은 데이터베이스 읽기가 필요합니다.
나는 이미 내가 가져올 수있는 최선을 최적화했으며 그 문제가 없습니다.
캐싱을 사용하여 계속 가져올 필요가없는 정보를 저장했습니다.
이제 반응 형 인터페이스를 만들고 싶습니다. 목표는 사용자에게 필터링 된 주문 헤더를 표시하고 백그라운드에서 주문 라인을로드하는 것입니다.
일부 계산의 전체 원인으로 모든 선 (주문 선)을 관리해야하므로 원인을 원합니다.
jQuery를 사용하여 주문 헤더를 가져와 캐시 (System.Web.Caching.Cache)에 저장하는 액션에 Ajax 호출을 사용하고 있습니다.
Ajax 호출이 성공하면 다른 Ajax 호출을 실행하여 줄을 가져오고 다시 캐시에 결과를 저장합니다.
아주 잘 작동합니다.
이제이 논리 중 일부를 클라이언트에서 서버로 옮길 수 있는지 알아 내려고했습니다.
내 작업이 호출되면 주문 헤더를 가져오고 주문 행 가져 오기를 담당하는 새 스레드를 시작하여 결과를 클라이언트에 반환하려고합니다. 테스트 응용 프로그램에서
나는 모두 ThreadPool.QueueUserWorkItem 및 Task.Factory을 시도하지만 생성 된 스레드 내 캐시에 액세스하려는.내가 같이 함께 테스트 응용 프로그램을 넣어 짓을했습니다
TEST 1
[HttpPost]
public JsonResult RunTasks01()
{
var myCache = System.Web.HttpContext.Current.Cache;
myCache.Remove("KEY1");
ThreadPool.QueueUserWorkItem(o => MyFunc(1, 5000000, myCache));
return (Json(true, JsonRequestBehavior.DenyGet));
}
TEST 2
[HttpPost]
public JsonResult RunTasks02()
{
var myCache = System.Web.HttpContext.Current.Cache;
myCache.Remove("KEY1");
Task.Factory.StartNew(() =>
{
MyFunc(1, 5000000, myCache);
});
return (Json(true, JsonRequestBehavior.DenyGet));
}
Func라고은 목록 상자 항목을 저장하고 결과를 캐시에 저장합니다. 꽤 바보 같지만 그것은 단지 시험입니다.
나는 누군가가 더 나은 해결책을 가지고 있는지 또는 별도의 스레드에서 캐시에 액세스 할 수있는 몇 가지 함축을 알고 있는지 알고 싶습니다.
내가 알아야 할 것이 있습니까?이를 피하거나 개선 할 수 있습니까?
도움 주셔서 감사합니다.
감사합니다. 캐시에 문제가있을 수 있다고 생각했습니다. 나는 시스템에 대해 몰랐어. 런 타임. 캐싱. 나는 그것을 볼 것이다. – LeftyX