Почему nextChunk из ChunkedInput возвращает новый ChannelBuffer? - PullRequest
1 голос
/ 14 декабря 2011

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

Почему я должен всегда возвращать новый ChannelBuffer?Это создает значительные накладные расходы на выделение памяти, создание объектов и сборку мусора для больших потоков.Этот буфер находится в очереди для асинхронной обработки?

В любом случае, я думаю, что к API-документации следует добавить, что nextChunk ДОЛЖЕН возвращать НОВЫЙ ChannelBuffer каждый раз.

1 Ответ

2 голосов
/ 14 декабря 2011

Да, это именно «проблема», которую ChannelBuffer помещает в очередь для записи. Поэтому, если вы используете его повторно, вы можете испортить его содержимое до того, как оно будет записано обратно.

...