2013-05-14 114 views
2

我可以確定從SecureStream讀取單個字節是否會阻塞?基礎流是一個NetworkStream,它具有DataAvailable屬性,但我期望SecureStream需要緩衝字節才能正常運行,所以我不認爲我可以依賴基礎流的DataAvailable是否可以確定是否從SecureStream讀取將被阻止?

另外,有沒有辦法執行永遠不會阻止的Read?我很確定沒有;我一直討厭Stream API,但也許我錯過了一些東西?

爲什麼:我們有一個具有高度優化路徑的TCP服務器實現來處理請求。特別是,對於每個請求,原始代碼總是使用BeginRead,但是我發現,只要數據已經可用(隨時發生短請求),將其替換爲Read就可以使我們的最大吞吐量增加20%以上。我想爲此代碼的SSL變體做同樣的事情。

回答

0

我想知道當數據可用時,爲什麼ReadBeginRead快得多。它不應該那麼激烈。

您可以查看底層流的可用數據,如果超過幾個字節,則可以假定數據可用並使用Read。否則,請使用BeginRead。爲了安全起見,請將ReadTimeout設置爲1毫秒,以防您錯過時不會長時間阻止。

但我認爲真正的問題是爲什麼BeginRead在第一位速度較慢。

+0

哦,當然,它不像它慢50ms,不。但它確實會在每秒4000到5000個請求之間產生差異。在這樣的規模下,我認爲這是可以理解的,它稍微慢一些。另外,你有幾個「少數」的具體建議? –