作为一般的经验法则,我会说不要使用会话.我没有必要使用会话很长一段时间.一旦进入Web场,会话会变慢或者更复杂或两者兼而有之.
您是否会侥幸成功取决于您在会话中存储的数据量,以及在会话超时期限内将有多少用户处于活动状态.
今天有很多缓存和内存数据库选项可能是更好的选择.最后,虽然所描述的解决方案听起来有问题,但在实际测量问题之前,我不会优化现有解决方案.
这取决于数据表中存储的内容.无论如何,我会使用ASP.NET Cache来存储这些数据表,原因如下.
缓存有一个到期时间,这意味着您可以根据滑动或绝对到期时间值自动删除它
如果进程内存"压力"太高,则会自动删除缓存.
您可以根据其密钥为特定于一个用户创建一个缓存项,或者为所有用户创建一个全局缓存项
例如:
// personalized cache item
string personalCacheKey = string.Format("MyDataTable_{0}", (int)Session["UserID"]);
DataTable myPersonalDataTable = (DataTable)Cache[personalCacheKey];
if (myPersonalDataTable == null)
{
myPersonalDataTable = database.dosomething();
Cache.Insert(personalCacheKey, myPersonalDataTable, null, Cache.NoAbsoluteExpiration, new TimeSpan(0, 30, 0)); // 30 minutes
}
// global (non user specific) cached item
string globalCacheKey = "MyDataTable";
DataTable globalDataTable = (DataTable)Cache[globalCacheKey];
if (globalDataTable == null)
{
globalDataTable = database.dosomething();
Cache.Insert(globalCacheKey, globalDataTable, null, Cache.NoAbsoluteExpiration, new TimeSpan(0, 30, 0)); // 30 minutes (again)
}
Run Code Online (Sandbox Code Playgroud)
但是,您现在遇到的问题是底层数据是否已更新,以及您的应用程序是否可以提供"旧"缓存数据.如果不可接受,则必须强制从缓存中删除一个项目,这有一些机制.
您可以设置SqlCacheDependency(我从未亲自使用过),或者您可以自己清除缓存的对象Cache.Remove(cachekey).
| 归档时间: |
|
| 查看次数: |
11622 次 |
| 最近记录: |