2013-05-14 3 views
2

Могу ли я определить, будет ли чтение одного байта от SecureStream? Основной поток - это NetworkStream, который имеет свойство DataAvailable, но я ожидаю, что SecureStream должен будет правильно байт для работы, поэтому я не думаю, что могу полагаться на базовый поток DataAvailable.Можно ли определить, заблокирует ли чтение SecureStream?

В качестве альтернативы, существует ли способ выполнить команду Read, которая никогда не будет заблокирована? Я почти уверен, что нет; Я всегда ненавидел это в отношении API Stream, но, может быть, я чего-то не хватает?

Почему: У нас есть реализация TCP-сервера с высоко оптимизированными путями для обработки запросов. В частности, исходный код всегда использовал BeginRead для каждого запроса, но я обнаружил, что заменяя его Read всякий раз, когда данные уже были доступны (что происходит все время с короткими запросами), наша максимальная пропускная способность увеличилась более чем на 20%. Я хотел бы сделать то же самое для варианта SSL этого кода.

ответ

0

Интересно, почему Read намного быстрее, чем BeginRead, когда имеются данные. Это не должно быть так сильно.

Вы можете посмотреть доступные данные по базовому потоку, и если это больше нескольких байтов, вы можете предположить, что данные доступны и используют Read. В противном случае используйте BeginRead. Чтобы быть в безопасности, установите ReadTimeout в миллисекунду, поэтому вы не будете блокировать надолго, если вы пропустите.

Но я думаю, что реальный вопрос заключается в том, почему BeginRead в первую очередь медленнее.

+0

О, конечно, не похоже, что это на 50 мс медленнее, нет. Но это делает разницу между 4000 и 5000 запросами в секунду. В этом масштабе, я думаю, понятно, что он немного медленнее. Кроме того, есть ли у вас конкретное предложение о том, сколько «нескольких»? –

Смежные вопросы