2013-11-20 41 views
-1

如何使用TMemoryStream連接UTF-16字符串?我知道TStringBuilder存在這種東西,但它在多線程場景中表現不佳,Eric Grange在his blog上表現得相當好。如他在下面的一張精美圖表中所示。如何使用TMemoryStream連接字符串

fancy chart

+1

使用TStringStream代替了什麼? –

+0

@TLama通過使用TMemoryStream :) –

+0

@KenWhite它比TStringBuilder更差? –

回答

3

連接字符串到這樣的流:

Stream.Write(Pointer(str1)^, Length(str1)*SizeOf(Char)); 
Stream.Write(Pointer(str2)^, Length(str2)*SizeOf(Char)); 

一些評論:

  1. 你可能需要使用比內存流更加個性化的流。
  2. 字符串生成器代碼可能不是您的瓶頸。而埃裏克的基準是必要的人爲的。
  3. 使用更好的內存管理器可能比提高自己的字符串生成器提高性能。
+0

請一次提出一個問題。您詢問了如何將字符串連接成流。 –

+2

而我們又重新開始。當調用'WriteString'時,'TBinaryWriter'在內部和'TStringStream'完全相同。它需要內部存儲'TEncoding'類實例並從中獲取字節。以及它寫入流的那些字節。本文中的代碼是使用RTL類將字符串寫入內存流的最低方式。你爲什麼還想要那個糖? – TLama

+0

@TLama好點。不知道TBinaryWriter使用TStringStream。 –