Какие классы коллекций использовать для хранения длинных строк?

Я получаю строку JSON каждые 0,01 секунды или даже быстрее, и мне нужно вставить ее в какую-то коллекцию, чтобы я мог позже пропустить каждую строку и выполнить некоторую обработку и удалить эту строку после этого. Процесс вставки продолжается. Я немного смущен, как использовать ArrayList или Queue.

Поэтому в основном я бы вставлял первое сообщение, затем второе, а затем... и одновременно другой процесс считывал первое вставленное значение для обработки и удаления этой записи, за которым следовало второе вставленное значение. Пожалуйста, сообщите, какой из них был бы самым быстрым и у вас было меньше места для хранения? Или любая другая коллекция лучше всего соответствует моим требованиям?

Edit: У меня есть два метода -

GetMessages() - который продолжает получать/добавлять сообщения в очередь (здесь сообщения принимаются только от одного источника, который продолжает отправлять сообщения и не останавливается, пока мы не остановим процесс вручную)

ProcessMessages() - который будет считывать записи в очереди и после обработки удалять их из очереди

Ответы

Ответ 1

Похоже, вы должны использовать ConcurrentQueue<string>, где один поток может вызывать значения, которые может появиться в другом потоке.

Определенно больше не используют или даже не думают об использовании типичного типа ArrayList.

Вам по-прежнему нужен какой-то бухгалтерский код, который проверяет, работает ли ваша обработка быстрее, чем вставка, иначе в какой-то момент вам гарантируется нехватка памяти.

Ответ 2

Кажется, что вы ищете шаблон дизайна производителя-потребителя (Wikipedia Producer-consumer_problem).

  • Производитель создает Json's
  • Потребители обрабатывают их.

Если это ваш случай, попробуйте BlockingCollection, который специально разработан для этого.

Ответ 3

От того, как я прочитал ваш вопрос, у вас есть в основном два требования:

  • Это очередь;
  • Безопасно одновременно стоять в очереди и деактивировать.

Я бы использовал ConcurrentQueue: он предоставляет механизм очередей, о котором вы говорите, и он также является потокобезопасным, поэтому вы можете добавлять и удалять одновременно без необходимости блокировки очереди самостоятельно.

Какая из лучших характеристик и памяти разумна, трудно сказать, не имея точной информации. Если у вас много повторяющихся строк, вы можете попробовать ставить их или создать кеш, где вы будете продолжать повторять элементы.