从Session读取或第二次计算值是否更快

时间:2015-11-17 11:28:16

标签: c# asp.net session session-variables

我还在使用ASP和C#开展我的第一个项目。一切都很好。唯一的问题是,我的页面有点慢。所以我开始优化页面的性能。

在改进了一些东西(Connection-Pooling,SQL-Statements,...)之后,a了一个时间计算。我希望它返回实际的日历周:

            CultureInfo myCI = new CultureInfo("en-US");
            System.Globalization.Calendar myCal = myCI.Calendar;
            CalendarWeekRule myCWR = myCI.DateTimeFormat.CalendarWeekRule;
            DayOfWeek myFirstDOW = myCI.DateTimeFormat.FirstDayOfWeek;
            currentWeek = myCal.GetWeekOfYear(DateTime.Now, myCWR, myFirstDOW);

现在我想知道如果我的网页计算一次并将其写入会话更快:

            Session["WeekToAnalyze"] = currentWeek;

并在以下所有页面上阅读:

            currentWeek= Convert.ToInt32(Session["WeekToAnalyze"].ToString());

或者在每一页上计算新内容是否更快?

1 个答案:

答案 0 :(得分:2)

我猜,使用Session时性能不会提高。

如果您想提高效果,可以执行以下操作:

  1. 请勿使用new CultureInfo(),请使用CultureInfo.GetCultureInfo()

    CultureInfo myCI = CultureInfo.GetCultureInfo("en-US");
    

    根据MSDN documentationCultureInfo.GetCultureInfo

      

    使用指定的区域性名称检索区域性的缓存,只读实例

  2. 存储其他变量,而不是每次都重新创建它们:

    public static class WeekOfYearProvider
    {
        private static CultureInfo CultureInfo { get; }
        private static Calendar Calendar { get; }
    
        static WeekOfYearProvider()
        {
            CultureInfo = CultureInfo.GetCultureInfo("en-US");
            Calendar = _cultureInfo.Calendar;
        }
    
        public static int GetWeekOfYear(DateTime dateTime)
        {
            return Calendar.GetWeekOfYear(dateTime,
                CultureInfo.DateTimeFormat.CalendarWeekRule,
                CultureInfo.DateTimeFormat.FirstDayOfWeek);
        }
    }    
    
  3. 每次调用WeekOfYearProvider.GetWeekOfYear时,它只会执行一个操作,这非常简单,而不是初始化整个CultureInfo对象并创建新的Calendar