日期:2014-05-18  浏览次数:20399 次

关于APP_Code中使用全局静态变量和类,在其他页面调用,是否有影响?
在App_Code中使用了好几个全局Static

如:
App_Code文件夹下 Basic.cs

C# code
//根据会员积分,获取会员等级图片标志
 public static string GetMarksPic(int marks)
{
  ......

}
public static int GetUserValue(string username)
{
 ......
}



我在其他页面中这样使用:

C# code
Basic mybasic=new Basic();
string pic=mybasic.GetMarksPic(100);
.........



目前网站在正常运行,暂未发现异常现象,但查阅资料,别人都说静态变量是全局共享的,会遇到有多线程冲突等错误。

(1)不知道我上面那些代码是否也将会有这样的错误?

(2)对于静态变量真的就有这么多缺点吗?该如何做?



------解决方案--------------------
参考
http://www.cnblogs.com/daniel206/archive/2008/01/10/1032908.html
http://www.cnblogs.com/kingkoo/archive/2008/07/18/1245956.html
------解决方案--------------------
用到恰当的地方就好
既然出现了 当然有它的用处
------解决方案--------------------
静态方法是对象所有的.非静态的类又拥有.
所以如果要调用GetMarksPic方法,不需要实例化:Basic.GetMarksPic()

------解决方案--------------------
静态变量不是静态方法或者类。。。

静态变量使用的时候确实有你说的那种情况,所以需要lock。

静态变量不是不能用,要根据实际的需要,并且要做到可控,不要滥用。静态变量在垃圾回收的时候会有问题(因为它是根),用的方法不对可能会Hold大量内存。

你上面的方法没有什么问题,就像开始我说的,你的是静态方法,和静态变量是两码事。
------解决方案--------------------
GetMarksPic是静态方法不能NEW 的; L楼主只要直接调用就可以了·!! Basic.GetMarksPic()
------解决方案--------------------
可以用锁(lock)来控制他的访问线程 这样就不会出现您所担心的问题了
------解决方案--------------------
顶了 

刚建一c#群 63242231 希望有志同道合的朋友和高手加入指导 

谢谢。。。呵呵呵