Devin Burke
Devin Burke

Reputation: 13820

Optimal way to cache time of day description

What is the best method to cache the following? I am creating an intranet web application template that will display the message, e.g., Good Morning, Justin Satyr! near the top of my master page header. Obviously, I will have to determine whether to show Morning, Afternoon or Evening. For clarity, my code is below:

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

I do not want to re-determine this on each page load because that seems moderately redundant and because I have to poll a SQL server to retrieve the user's full name. What is the best way to cache this information? If I cache it for the length of the session, then if the user begins using the application at 11:00 AM and finishes at 3:00 PM, it will still say Good Morning.

Is the best thing to do simply re-determine the M/A/E word each page load and cache the person's full name for the session? Or is there a better way?

Upvotes: 3

Views: 3318

Answers (4)

Craig
Craig

Reputation: 18694

Old, I know, but I don't cache mine, due to the obvious reason that the users time may change during the session. I store their calculated time in my session (calculates based on their timezone), and then use this code at the top of all pages:

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

Works well for me!

Upvotes: 0

FLCL
FLCL

Reputation: 2514

If you are talking in ASP.NET MVC context, you can use System.Web.Helpers namespace, where you can find WebCache helper. Than you need to calculate minutes to time of day_time will be changed and call WebCache.Set method with paramters: value="your string", minutesToCache=calculated_value.

Upvotes: 0

Florian Greinacher
Florian Greinacher

Reputation: 14784

In my opinion there is absolutely no need to cache the part of day. User information can be made available in the Session.

Upvotes: 4

BrokenGlass
BrokenGlass

Reputation: 160892

I would just keep the user name in the Session object, the rest honestly is not worth caching and checking if it is out of date etc., just re-run it on each page - provided you put the implementation into a common library /class so you keep your code DRY.

Upvotes: 9

Related Questions