2011-03-30 21 views
2

缓存以下内容的最佳方法是什么?我正在创建一个Intranet Web应用程序模板,它将显示该消息,例如,早安,Justin Satyr!靠近我的母版页眉的顶部。很显然,我将不得不决定是否显示上午,下午晚上。为了清楚起见,我的代码如下:缓存当天描述的最佳方式

string partOfDay; 
var hours = DateTime.Now.Hour; 
if (hours > 16) 
{ 
    partOfDay = "evening"; 
} 
else if (hours > 11) 
{ 
    partOfDay = "afternoon"; 
} 
else 
{ 
    partOfDay = "morning"; 
} 

我不想在每个页面加载重新确定这一点,因为这似乎适度冗余的,因为我有轮询SQL服务器来获取用户的全名。什么是缓存这些信息的最佳方式?如果我将其缓存到会话的长度,那么如果用户在上午11:00开始使用应用程序,并在下午3:00结束,它仍然会说早上好

最简单的做法是重新确定每页加载的M/A/E字并缓存该会话的全名。或者,还有更好的方法?

+2

Emh ..你为什么不把用户名保留在Session对象中?其余的你并不需要任何缓存。 – BrokenGlass 2011-03-30 19:24:23

+0

这就是我在倒数第二句话中所要求的,但我想也许有办法强制这些信息在特定的时间到期。如果是这样,那么我可以将其缓存在应用程序中,但这会对不同时区的用户造成问题... – 2011-03-30 19:28:10

回答

7

我只是将用户名保留在Session对象中,其余的实际上不值得缓存,并检查它是否过期等,只需在每个页面上重新运行它 - 只要您将实现放入共同的库/类,让你的代码保持干爽。

4

在我看来,绝对没有必要缓存一天的部分。用户信息可以在会话中使用。

0

如果您在ASP.NET MVC上下文中讨论,则可以使用System.Web.Helpers命名空间,您可以在其中找到WebCache帮助程序。比你需要计算day_time的时间分钟将被改变,并调用WebCache.Set方法与参数:值=“你的字符串”,分钟Tacheache = calculated_value。

0

老,我知道,但我不缓存我的,由于明显的原因,用户时间可能在会话期间改变。我存储他们计算出的时间在我的会话(计算基于他们的时区),然后在所有页面的顶部使用此代码:

<strong>@string.Format("Good {0}, ", SessionManager.GetUserCurrentDate().Hour > 16 ? "Evening" : SessionManager.GetUserCurrentDate().Hour > 11 ? "Afternoon" : "Morning") + SessionManager.GetDisplayName())</strong> 

很适合我!