asp.net网站,app_code里写了一个类.cs里面有个静态函数 public static fun(int a)
函数里声明变量int b,b通过a的值决定。网站发布后,偶然会出现问题。
当调用这个函数时,偶尔在函数执行过程中b的值错误,而且前半段计算b是正确的,到函数的后半截就有可能出错。几个月里出过两三次这个现象。大家谁知道可能出现这个现象的原因。

解决方案 »

  1.   

    应该和静态函数无关,int a是值引用,int b又是在函数里面声明的,所以不会有什么问题
      

  2.   

    app_code里写了一个类.cs里面有个静态函数
    -------------------------------为什么要用静态函数呢
      

  3.   

    app_code里写了一个类.cs里面有个静态函数 
    ...
      

  4.   

    你那个变量b是不是静态的?不要在Web应用中轻易使用静态字段...静态字段在多线程并发时是不安全的,如果一定要用就必须保证其线程安全,例如lock...
      

  5.   

    int b 非静态变量
    代码很长,先是计算出来b然后后面就不在给b赋值,全是用b的值来计算结果体现出来就是前半段计算时b没错,到后半段就有可能出错。似乎不是代码的错误。偶然 小概率出现 不可人为重现几个月就出现了一两次
      

  6.   

    public class a
    {    
    public a()
        {
            //
            //TODO: 在此处添加构造函数逻辑
            //
        }
        public static string GetHTML(int b)
        {
    int c = b*10;
    string str ="";
    if(c>15)
    {
    str +="1";
    }
    if(c<15)
    {
    str +="2";
    }
    return str;}页面调用 string str = a.b(1);结果 str = “12”;大概就是这样的代码结构,错误就是这样的现象逻辑应该没问题,平时操作一切正常。并发测过,函数内加System.Threading.Thread.Sleep(10000);
    证明并发调用互不干扰。
    没做过压力测试,不知道当服务器访问量比较大时会不会内存里的数据出错(现我猜有可能是这个原因,但不知道怎么测试证明)
    服务器是win2008 IIS
      

  7.   

    static method is not thread safe. It could cause a problem with multi-threading. To fix it, use a lock. for example,class foo
    {
        static int total;
        static object synchLock = new object();    public static int GetTotal(int num)
        {
            lock(synchLock)
            {
                total = 0;            for (int i = 0; i < num; i++)
                {
                    total += i;  
                    Thread.Sleep(100);
                }
                return total;
            }
        }
    }