我可以用字符串替换字符的速度有多快?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