Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否使用会话变量进行ASP.NET缓存?_C#_Asp.net_Session_Caching - Fatal编程技术网

C# 是否使用会话变量进行ASP.NET缓存?

C# 是否使用会话变量进行ASP.NET缓存?,c#,asp.net,session,caching,C#,Asp.net,Session,Caching,我有一些社区网站,数据库中有大约40000个用户,有很多属性栏。有两个页面,其中最新用户和在线用户根据某种标准显示,即性别 我做了一些SQL技巧,每页只获取10行,这样SQL server就不会返回太多用于搜索、收件箱等的信息。。和其他基于用户的数据,但在线和最新用户对我的网站的所有用户都是全局的,因此我可以对这些数据使用某种缓存。问题是,我在登录时设置的会话中使用了一些用户变量,所以,若我使用默认的输出缓存,会话将与其他用户交换 你将如何解决这个问题?我知道一些方法,但这里的一些人有很多经验,

我有一些社区网站,数据库中有大约40000个用户,有很多属性栏。有两个页面,其中最新用户和在线用户根据某种标准显示,即性别

我做了一些SQL技巧,每页只获取10行,这样SQL server就不会返回太多用于搜索、收件箱等的信息。。和其他基于用户的数据,但在线和最新用户对我的网站的所有用户都是全局的,因此我可以对这些数据使用某种缓存。问题是,我在登录时设置的会话中使用了一些用户变量,所以,若我使用默认的输出缓存,会话将与其他用户交换

你将如何解决这个问题?我知道一些方法,但这里的一些人有很多经验,所以我等待你的意见。我认为这是一个普遍的问题,任何人谁做或做的应用程序与许多用户在它。也许是船员


干杯

为什么不使用HttpContext.Items属性来存储它,这样它就可以全局存储而不是本地存储(即:HttpContext.Session)?

您说,您不能使用输出缓存,因为您使用的是用户特定的数据来生成输出。但是,您也可以通过编程方式使用缓存,将您访问的对象存储在代码隐藏文件(HttpContext.cache)中

因此,您可以在代码隐藏文件中编写如下内容(伪代码):

var cacheableUserData = (UserData)Cache("UserData");
if (cacheableUserData== null)
{
    cacheableUserData= GetDataFromDB();
    Cache.Add("UserData", cacheableUserData); // Set cache expiration here
}
var dataToPresent = CombineData(userData, loggedInUserData);

然后,您不会缓存输出,而是缓存用于生成输出的部分数据。

我将userID、userAge和其他几个字段存储在那里。在全球范围内拯救这些人有什么用?我真的不明白问题出在哪里…:It’哦,多读几遍之后。您需要按会话变量进行缓存。默认输出缓存不会影响会话,除非您在使用outputcache呈现的控件中使用user sepcific stuff。当从会话中获取某些内容时,输出缓存将影响我的控件?userID=something所以如果我输出缓存页,我获取第一个在输出缓存周期中使用页面的用户的userID。VaryByParam基于查询字符串。?userID=某个东西不是querystring?