从 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
不会有性能提升。
如果你想提高你的表现,你可以这样做:
不使用new CultureInfo()
,使用CultureInfo.GetCultureInfo()
:
CultureInfo myCI = CultureInfo.GetCultureInfo("en-US");
根据MSDN documentation、CultureInfo.GetCultureInfo
Retrieves a cached, read-only instance of a culture using the specified culture name.
存储其他变量而不是每次都重新创建它们:
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
。
我仍在使用 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
不会有性能提升。
如果你想提高你的表现,你可以这样做:
不使用
new CultureInfo()
,使用CultureInfo.GetCultureInfo()
:CultureInfo myCI = CultureInfo.GetCultureInfo("en-US");
根据MSDN documentation、
CultureInfo.GetCultureInfo
Retrieves a cached, read-only instance of a culture using the specified culture name.
存储其他变量而不是每次都重新创建它们:
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
。