public bool Get(byte[] buffer)
Это было бы одно очевидное место, чтобы потерять ссылку. Этот метод не может фактически вернуть буфер, который был получен. Вам нужно будет использовать ключевое слово ref , чтобы оно возвращало массив. Трудно поверить, что настоящий код выглядит примерно так, он просто не будет работать вообще. Есть много других красных флажков, ConcurrentBag имеет ассоциативность потоков, вещи теряются, если вы создаете потребительские потоки на лету. Вы не можете синхронизировать потребителя с производителем с ManualResetEvent, он может рассчитывать только до 1.
В общем, эта оптимизация не подходит, если размер буферов не превышает 85 КБ. Доверьтесь сборщику мусора, он делает отличную работу, которую очень трудно улучшить.