Я заметил, что самый быстрый способ (на данный момент) итерации по словарю с модификацией:
//Just a dumb class
class Test<T>
{
public T value;
public Test() { }
public Test(T v) { value = v; }
}
Dictionary<int, Test<object>> dic = new Dictionary<int, Test<object>>();
//Init dictionary
foreach (KeyValuePair<int, Test> pair in dic)
{
pair.Value.value = TheObject;//Modify
}
VS
List<int> keys = new List<int>(dic.Keys); //This is fast operation
foreach (int key in keys)
{
dic[key] = TheObject;
}
Первый занимает около 2,2 с, а второй - 4,5 с (проверенный размер словаря 1000 и повторение 10 000 раз, изменение размера словаря до 10 не изменило соотношения). Также не было особой проблемы с получением списка ключей, значение словаря [ключа] - это просто медленная VS, встроенная в итерацию. Также, если вы хотите еще большую скорость, используйте жестко закодированный тип для «тупого» («Test») класса, с этим я получил около 1,85 с (с жестко закодированным «object»).
EDIT:
Анна уже публиковала такое же решение раньше: https://stackoverflow.com/a/6515474/766304