小心使用BufferedStream

2021-05-10 02:43:47 字數 437 閱讀 3387

小心使用bufferedstream

dotnet下有個bufferedstream類,一些文件說了它的好處,主要是提高效能等等。但好像沒人說它會帶來的問題。我想可能因為大家對裡面的原理了解不深。

我綜合了許多資料,發現bufferedstream核心就是要實現批量read和批量write,我不討論write,下面只討論read的原理,優點和問題。

我們程式一般會每次read乙個字元或幾個字元,而bufferedstream會採用預讀方式,一次性讀出256個位元組到內部buffer。再逐步供我們read,從而達到批量讀,效能有所提高。

但問題也來了,如果我們只需要讀10位元組,而bufferedstream卻多讀了200多位元組。將引起後續程式的邏輯錯誤。這個錯誤很隱蔽,出了錯很難查。這是我們做通訊編碼解碼程式設計的乙個值得小心注意的。

此問題我在dotnet 2.0上用c#語言做過測試。

strcat小心使用

strcat是對字串的拼接,有時候拿過來用挺方便的。但是大面積用,變得不清晰,都不知道字串到底程式設計了什麼。還有另外一點,如果定義了乙個全域性的字串,函式迴圈裡需要對字串拼接後使用,如果不停的迴圈,就相當於不停的追加,可能造成記憶體溢位,或者資源崩潰。例子 id 全域性變數 cstring型別 迴...

使用memset要小心

今天把程式重構了。執行一下,沒想到程式到了退出的時候觸發了乙個 assert 看看棧資訊,執行到了 cstring 的析構函式 cstring cstring freeanyattacheddata afx inlinecstringdata cstring getdata const class ...

小心使用IOCP完成埠

s createsocket 假定s返回值是10 createiocompletionport s,m hcompletionport,dword ptr a,0 wsasend s,wsasend s,wsasend s,wsasend s,wsasend s,這個時候,完成埠裡累計了多條跟s相關...