如果不用静态, 如何让 // 分页参数 public static int myPage; public static string mySearchKeyword; public static string mySearchList; 在整个类中, 都可以调用呢? 因为还有其他的函数, 需要使用该参数.
[ThreadStatic] public static int myPage; public static string mySearchKeyword; public static string mySearchList; 表示这几个变量是线程持有的 而不是所有线程共有的这样每个线程都会拥有独有的,静态的myPage,mySearchKeyword和mySearchList
如果不用静态, 如何让
// 分页参数
public static int myPage;
public static string mySearchKeyword;
public static string mySearchList; 在整个类中, 都可以调用呢? 因为还有其他的函数, 需要使用该参数.
public static int myPage;
public static string mySearchKeyword;
public static string mySearchList; 表示这几个变量是线程持有的
而不是所有线程共有的这样每个线程都会拥有独有的,静态的myPage,mySearchKeyword和mySearchList
我大概分析了一下
可能是下面原因造成的:多个用户请求的是同一个page实例,所以即便声明ThreadStatic也会认为是这个page实例的静态属性
1.page对象相同-->2.所有赋值均在同一个page对象进行-->3.page对象占用的线程不变-->4.page对象改变自己线程内的static属性
解决方法:采用缓存技术缓存用户请求,例如:
public static Dictionary<string, object[]> cache;
protected void Page_Load(object sender, EventArgs e)
{
string cacheKey = string.Format("user:{0}",userid);
if (!cache.ContainsKey(cacheKey))
{
cache.Add(cacheKey,"用户搜索关键字");
}
}
且记你的公共变量,不能赋session等全局值!!!!