【问题标题】:Index out of bounds on Dictionary.InsertDictionary.Insert 上的索引超出范围
【发布时间】:2013-12-15 07:10:09
【问题描述】:

我在 C# 中得到以下异常

索引超出了数组的范围。

在 System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)

在 System.Collections.Generic.Dictionary`2.System.Collections.IDictionary.set_Item(对象键,对象值)中

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

所以问题是:

  1. 字典在扩展失败时是否会出现索引越界?还是我的例外是由于其他原因?
  2. 如果 1 为真,关于如何在应用程序和 SQL 服务器之前平衡内存使用的任何建议?

更新

按要求添加代码:

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

【问题讨论】:

  • 什么时候得到异常?是在您循环按键时吗?就像@MitchWheat 所说,没有代码,没有答案。

标签: c# sql-server dictionary


【解决方案1】:

这可能是一个并发问题。也许你忘了在别处锁定你的字典(obj)? 无论哪种方式,您都可以使用 ConcurrentDictionary,这是线程安全的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多