从 Session 读取还是第二次计算 Value 更快

Is it faster to read from Session or calculated a Value a second time

我仍在使用 ASP 和 C# 开发我的第一个项目。一切正常。唯一的问题是,我的页面有点慢。所以我开始优化我的页面性能。

在改进了一些东西(连接池,SQL-语句,...)之后,时间计算出现了交叉。我想要 return 实际日历周:

            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());

还是在每个页面上重新计算它更快?

我猜,使用 Session 不会有性能提升。

如果你想提高你的表现,你可以这样做:

  1. 不使用new CultureInfo(),使用CultureInfo.GetCultureInfo():

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

    根据MSDN documentationCultureInfo.GetCultureInfo

    Retrieves a cached, read-only instance of a culture using the specified culture name.

  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);
        }
    }    
    

每次调用WeekOfYearProvider.GetWeekOfYear,它只会执行一个操作,这很简单,而不是初始化整个CultureInfo对象并创建一个新的Calendar