我有以下方法:
/// <summary>
/// Gets the specified side of trades.
/// </summary>
/// <param name="tradesDictionary">The trades dictionary.</param>
/// <param name="side">The side.</param>
public IEnumerable<TradeRecord> GetTrades(Dictionary<Guid, TradeRecord> tradesDictionary, Side side)
{
return (from tradeRecord in tradesDictionary.Values.ToList().AsParallel()
where (tradeRecord.OrderRecord.PairRecord.Id == _pairId)
&& (tradeRecord.Side == side.ToString())
orderby tradeRecord.Date, tradeRecord.DateCreated, tradeRecord.Id
select tradeRecord);
}
导致以下异常:
目标数组不够长 复制中的所有项目 采集。检查数组索引和 长度。
传入的词典,规模不断扩大。我之前没有收到错误,唯一改变的是tradesDictionary中的数据量。
答案 0 :(得分:3)
“传入的字典,不断增加”
你的意思是在你执行这段代码时它被修改了吗?这是禁忌。我怀疑ToList
电话因此而失败。 (执行ToList()
后,列表应与字典有效分开。)
基本上Dictionary<TKey, TValue>
不支持并发读写。您可能希望查看ConcurrentDictionary<,>
,它允许您在另一个线程正在编写时迭代它。
在一切正常工作时提高性能的一个建议:在方法开始时调用side.ToString()
一次,而不是每次循环迭代。