Как быстро я могу заменить символы в строке?
Итак, история вопроса такова: у нас есть пара приложений, которые взаимодействуют друг с другом и с клиентскими приложениями через сокеты. Эти сообщения сокетов содержат непечатаемые символы (например, chr (0)), которые должны быть заменены заранее определенной строкой (например, "{Nul}"}, потому что сообщения сокетов хранятся в файле журнала. в каждом сообщении журнала должны быть заменены символы.
Теперь я начал с этого небольшого приключенческого чтения с этой ссылки MSDN , которую я нашел в другом посте с этого сайта.
Текущий метод, который мы использовали ... в начале дня ... использовал 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.
Так что мой вопрос ко всем: могу ли я сделать это еще быстрее? Чего мне не хватает?