我还在使用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());
或者在每一页上计算新内容是否更快?
答案 0 :(得分:2)
我猜,使用Session
时性能不会提高。
如果您想提高效果,可以执行以下操作:
请勿使用new CultureInfo()
,请使用CultureInfo.GetCultureInfo()
:
CultureInfo myCI = CultureInfo.GetCultureInfo("en-US");
根据MSDN documentation,CultureInfo.GetCultureInfo
使用指定的区域性名称检索区域性的缓存,只读实例。
存储其他变量,而不是每次都重新创建它们:
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
。