Я должен сохранить многомерные данные, состоящие из чисел способом, с которым это легко работать. Я собираю данные в режиме реального времени (обрабатывающий живые видеокадры каждый 40ms/10ms) и когда-то обработал, я уничтожу и GC более старые данные.
Эта структура данных должна быть быстрой, таким образом, она не поразит мою полную производительность приложения. Быстрее лучше (мои алгоритмы являются довольно трудоемкими от 1 мс до 20 мс и я буду читать / пишущий эти данные партии всюду по моему коду).
То, каков мой выбор с точки зрения платформы, поддерживало структуры данных? Я использую VS 2010. и.NET 4.
Вероятно, самый быстрый способ:
array [x, y]
<=> array [x + y * columns]
) Конечно, это общий ответ, потому что вопрос также довольно общий. Хотя не могу ошибиться.
Как насчет простого многомерного массива? Это кажется очевидным и самым быстрым выбором.
В реальном времени или нет, создание объекта в .NET происходит довольно быстро, так что насчет ConcurrentQueue+ кортежей?
Таким образом, вы можете читать/писать потокобезопасно с довольно стандартными структурами данных. Следующий код занял 3 секунды на моем T500 в Visual Studio с включенной отладкой:
Stopwatch sw = Stopwatch.StartNew();
var q = new ConcurrentQueue<Tuple<int, int, int>>();
Enumerable.Range(0, 10000000).AsParallel().ForAll(i => q.Enqueue(Tuple.Create(i, i, i)));
Console.WriteLine(sw.ElapsedMilliseconds);
Console.ReadLine();
Забавно, но непараллельная версия еще быстрее.