我可以用字符串替換字符的速度有多快?VB.NET中字符串的替換
所以這個問題的背景是這樣的:我們有幾個應用程序通過套接字與客戶的應用程序進行通信。這些套接字消息包含需要用預定字符串(例如「{Nul}」}替換的非可打印字符(例如,chr(0)),因爲套接字消息保存在日誌文件中。每個日誌消息將需要有替換的字符。
現在,我開始對這個小小的冒險指數從this MSDN link這是我從不同的崗位從這個網站上發現。
我們當前使用的方法......在一天的開始...正在使用StringBuilder檢查所有可能的替換,例如...
Public Function ReplaceSB(ByVal p_Message As String) As String
Dim sb As New System.Text.StringBuilder(p_Message)
sb.Replace(Chr(0), "{NUL}")
sb.Replace(Chr(1), "{SOH}")
Return sb.ToString
End Function
現在,當博客文章指出將StringBuilder退出並使用string.replace確實會產生更快的結果。 (實際上,使用StringBuilder的是整天這樣做的最慢的方法。)
p_Message = p_Message.Replace(Chr(0), "{NUL}")
p_Message = p_Message.Replace(Chr(1), "{SOH}")
知道,不是每一個消息都需要經過這個過程中,我認爲它會節省時間,不必處理這些消息是可以被排除在外。所以使用正則表達式我首先搜索字符串,然後確定是否需要處理。這與使用string.replace大致相同,基本上是節省了不處理所有字符串的時間,但是由於使用正則表達式檢查所有字符串而浪費時間。
然後有人建議嘗試使用一些數組,它們的索引與舊的和新的匹配,並用它來處理消息。所以它會是這樣的...
Private chrArray() As Char = {Chr(0), Chr(1)}
Private strArray() As String = {"{NUL}", "{SOH}"}
Public Function TestReplace(ByVal p_Message As String) As String
Dim i As Integer
For i = 0 To ((chrArray.Length) - 1)
If p_Message.Contains(chrArray(i).ToString) Then
p_Message = p_Message.Replace(chrArray(i), strArray(i))
End If
Next
Return p_Message
End Function
這是迄今爲止我發現處理這些消息的最快方式。我已經嘗試了各種其他方式來解決這個問題,比如將傳入的字符串轉換爲字符數組,並且同時嘗試通過字符串而不是chrArray進行循環。
所以我的問題是:我可以做得更快嗎?我錯過了什麼?
如果你必須使用C#的選項,你也許可以寫出不安全的代碼,一個不懷好意的快捷功能。 – Juliet 2010-11-30 22:41:17
我曾想知道這是否可能,但很快就將這個選項計算出來了,因爲我得到的參數與它們一起工作......哦, – Tim 2010-12-01 03:07:05