То, что вы описали, является общей картиной вашего приложения. Чтобы изменить дизайн вашего приложения, мы предъявляем конкретные требования и, по крайней мере, упрощенную модель взаимодействия участников друг с другом. Ваше неофициальное описание не является достаточно точным, чтобы предложить конкретную структуру данных и алгоритм, потому что, не зная всех достаточно подробностей, мы можем опустить что-то важное и не соответствовать вашим потребностям.
Вы говорите все правильные слова, и у вас есть конкретная проблема, нехватка памяти, и вам нужно что-то исправить. Вернитесь к прототипированию. Напишите очень маленькую, но жестоко тренированную программу, чтобы продемонстрировать, что вы хотите сделать. Затем масштабируйте его до своего приложения. Гораздо проще спроектировать размер прототипа.
Edit:
Поскольку у вас заканчивается память, наиболее вероятные причины: утечка памяти или просто система, работающая почти в реальном времени, с недостаточным объемом для обработки нагрузки, с которой вы столкнулись. Утечка может быть связана с обычными подозреваемыми, например, не отключать обработчики событий, которые вы можете диагностировать с помощью профилировщиков памяти, но пока мы это исключим.
Если вы должны следить за кавычками по мере их обновления, они должны идти куда-то, например, в очередь, или отправляться в поток, и, если вы не успеваете за ними, это может стать неограниченным.
Единственный способ решить эту проблему:
- бросить некоторые цитаты на пол
- получить лучшее оборудование
- обрабатывать котировки более эффективно
Я думаю, вы надеетесь, что есть четкая альтернатива более эффективной обработке кавычек с новой структурой данных или алгоритмом, который может иметь большое значение. Но даже если вы сделаете его более эффективным, проблема все равно может вернуться, и вам придется подумать о постепенном снижении производительности в условиях перегрузки, а не об отказе из-за недостатка памяти.
Но в общих чертах, для высокой производительности проще - лучше, и чем меньше потоков, тем лучше. Например, если работа, выполняемая в обновлении, невелика, синхронизация может быть большим выигрышем, даже если это кажется противоинтуитивным. Вы должны знать, что делает обработчик обновлений, и больше всего для системы, работающей почти в реальном времени, которую вы должны измерить, измерить, измерить, чтобы эмпирически узнать, какая из них самая быстрая.