【发布时间】:2022-01-11 19:35:59
【问题描述】:
我目前正在使用字典计算事件结果的出现次数,我将其添加如下:
IDictionary<double, double> OutcomeCounter = new Dictionary<double, double>();
public void IncrementDict(IDictionary<double, double> dict, double newKey, double increment = 1)
{
if (!dict.ContainsKey(newKey))
{
dict.Add(newKey, 0);
}
dict[newKey] += increment;
}
但是,这占了总模拟时间的 20% 左右,我想知道你们中是否有人对如何减少它有什么好主意?
模拟产生了 100 亿个结果(总计大约 50,000 个不同的结果),因此将每个结果存储在列表中会占用太多内存。
提前致谢。
【问题讨论】:
-
考虑使用多线程。但是字典不是线程安全的。我也避免在这里使用
.Add- 只是尝试获取值然后直接分配它 -
由于计数速度是模拟速度的四倍,因此您可以创建一个固定大小的循环队列并将结果从运行模拟的线程存储到其中。同时,运行一个单独的线程,从循环队列中取出项目并将它们添加到字典中。
-
检查过多(
Contains、Add、[])。试试if (!dict.TryAdd(newKey, increment)) dict[newKey] += increment;
标签: c# dictionary