Index.Insert上的索引超出界限

时间:2013-12-15 07:10:09

标签: c# sql-server dictionary

我在C#中得到以下异常

  

索引超出了数组的范围。

     System.Collections.Generic.Dictionary`2.Insert中的

(TKey键,TValue值,布尔加法)

     System.Collections.Generic.Dictionary`2.System.Collections.IDictionary.set_Item(Object key,Object value)中的

应用程序在同一台计算机上运行SQL Server。在第一次出现异常后,此字典上的所有后续操作都将获得100%的此异常。那时服务器内存使用率为98%,SQL服务器占用率为85%+。根据我的理解,如果其他应用程序正在获取,SQL Server将释放内存,但似乎并非如此。

所以问题是:

  1. 当字典无法扩展时,它的索引是否会超出范围?或者我的例外是由于其他原因?
  2. 如果1为真,那么关于如何在应用程序和SQL服务器之前平衡内存使用的任何建议?
  3. 更新

    按要求添加代码:

    if (data == null)
        return;
    var obj = CacheData<T>();
    lock (obj)
    {
        obj[data.ID] = data; <== exception occurs here
    }
    

1 个答案:

答案 0 :(得分:1)

这可能是一个并发问题。也许你忘了在其他地方锁定你的字典(obj)? 无论如何,你可以使用ConcurrentDictionary,这是线程安全的。