+ -
当前位置:首页 → 问答吧 → 做压力测试中碰到的奇怪问题

做压力测试中碰到的奇怪问题

时间:2011-12-23

来源:互联网

错误一 异常详细信息: System.ArgumentException: 已添加了具有相同键的项。
代码如下

行 102: if (!_EnumList.ContainsKey(keyName))
行 103: {
行 104: _EnumList.Add(keyName, list);
行 105: }
行 106: }
 
已经判断了 为什么还会出现

错误二 给定关键字不在字典中。 

 
行 65: dv.Sort = "Menu_Sort asc,Menu_ID ";
行 66: rptproduct.DataSource = dv;
行 67: rptproduct.DataBind();
行 68: } 
行 69: 
 
这个大部分时候是正常 ,500次中出现了3次这种错误 为什么会出现呢

作者: ayun00   发布时间: 2011-12-23

典型的没考虑并发啊。加同步锁。

C# code
private static object _lockObj = new object();

...
lock(_lockObj)
{
   if (!_EnumList.ContainsKey(keyName))
   {
      _EnumList.Add(keyName, list);
   }
}

作者: fangxinggood   发布时间: 2011-12-23

楼上正解。
  如果没有做这个压力测试,LZ估计都不会发现这个问题,即使发现了,查代码也很难查出来。

作者: longxun_chen   发布时间: 2011-12-23

我检查了下代码 已经加了同步锁啊

  object syncObj = new object();

  lock (syncObj)
  {
  if (!_EnumList.ContainsKey(keyName))
  {
  _EnumList.Add(keyName, list);
  }
  }

作者: ayun00   发布时间: 2011-12-23

错误二 给定关键字不在字典中 
 又是为什么呢

作者: ayun00   发布时间: 2011-12-23

也是因为把并发吗?

作者: ayun00   发布时间: 2011-12-23

object syncObj = new object();

是static的吗?

作者: fangxinggood   发布时间: 2011-12-23