Nilesh Warude 2 Ответов: 0

Проблема медлительности страницы Acquirerequeststate


Мы воспользовались рамках 4.6.1 и MVC 5. Используемая архитектура-nlayer проект и эффектная.

У нас есть облицовка AcquireRequestState вызывает проблему медленного времени загрузки страницы.

Код C#- мы использовали SqlCacheDependency для приведенного ниже кода
public class AccessMenuController : BaseController
    { 
		public ActionResult AppCount()
        {
            var result = _iAccessMenu.AppCount(Session["Id"]);
            return Json(result, JsonRequestBehavior.AllowGet);
        }
	}	

public int AppCount(int Id)
        {
            try
            {
                List<dbparameter> Params = new List<dbparameter>();
                GenericDAL oGenericDAL = new GenericDAL();
                Params.Add(oGenericDAL.PrepareParameter("@PracticeID", DbType.Int32, Id));              


                return (int)_ISqlCache.GetCacheDataDAL("USP_LiveWidget_GetCounts", Params, "tblLiveWidgetCheckedInVisitCount", "AppointmentCheckinCount:" + Convert.ToString(PracticeId) + ":" + Convert.ToString(ResourceId), "AppointmentCheckinCount", InSyncConvert.ToInt(CatcheExpireTimings.AppointmentCheckinCount)).Rows[0][0];
            }
            catch (Exception)
            {
                throw;
            }
}

public  DataTable GetCacheDataDAL(string StoreProceName, List<dbparameter> SqlParam, string TableName, string cacheName,string KeyName,Int32 CatchExpiredSeconds)
        {
            
            DataTable dtTemp = null;
            object obj = CommonSqlCacheUtilities.GetCacheData(cacheName);
            dtTemp = (DataTable)obj;
            if (dtTemp == null)
            {
               
                dtTemp = new DataTable();
                dtTemp = GetCacheDAL(StoreProceName, SqlParam);
                CommonSqlCacheUtilities.SetCacheData(cacheName, dtTemp,  TableName, KeyName, StoreProceName, SqlParam, CatchExpiredSeconds);
            }
            return dtTemp;
        }
 

  public static object GetCacheData(string cacheName)
        {
            return HostingEnvironment.Cache.Get(cacheName);

        }
        public static void SetCacheData(string cacheName,  object dataSet, string tableName,string KeyName, string StoreProceName, List<dbparameter> SqlParam,Int32 CatchExpiredSeconds)
        {
            //Many articles online state that the following statement should be run only once at the start of the application. 
            //Few articles say the object get replaced if called again with same connection string.
            InSync.Utility.DecryptConnection objDecryption = new InSync.Utility.DecryptConnection();
            string connString = objDecryption.GetConnectionString("SQLConnectionString", false);
            SqlDependency.Start(connString);

            //The following statements needs to be run only once against the connection string and the database table, hence may also be moved to an appropriate place in code.
            SqlCacheDependencyAdmin.EnableNotifications(connString);
            SqlCacheDependencyAdmin.EnableTableForNotifications(connString, tableName);
            SqlCommand sc = new SqlCommand(StoreProceName,new SqlConnection(connString));
            sc.CommandType = CommandType.StoredProcedure;
            
            foreach (var item in SqlParam)
            {
                sc.Parameters.AddWithValue(item.ParameterName,item.Value);
            }                                    

            SqlCacheDependency dependency = new SqlCacheDependency(sc);
            
            HostingEnvironment.Cache.Insert(cacheName, dataSet, dependency, DateTime.Now.AddSeconds(CatchExpiredSeconds), Cache.NoSlidingExpiration, CacheItemPriority.Normal,null);

        }
        public static void RemoveCacheData(string CacheName)
        {
            HostingEnvironment.Cache.Remove(CacheName);
        }

код js
function AppCount() {
    $.ajax({
        type: "GET",
        contentType: "application/json; charset=utf-8",
        url: getBaselocation("AccessMenu/AppCount"),
        async: true,
        data: {
        },
        dataType: "json",
        success: function (response) {
		}
	});
}
$(document).ready(function () {
 setInterval(function() {
      
            AppCount();
       
    },
        55003);
})

Пожалуйста, помогите мне решить мою проблему

Что я уже пробовал:

мы перенесли фреймворк с 4.6.1 на 4.7.2 и пытаемся его реализовать
[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)] на уровне контроллера и session.Required внутри контроллера, но лицом к нему TempData null проблема при перенаправлении контроллера на контроллер. мы также использовали метод Keep.

0 Ответов