Страница: 1 |
Народ, подскажите, как можно оптимизировать данную функцию, и возможно ли это вообще? Просто, если я пытаюсь поменять кодировку в большом тексте ФУНКЦИЯ работает медленнее чем хотелось бы. =========================================================================== Public Function ReCodePage(ByVal strText As String, ByVal OldCP As Integer, ByVal NewCp As Integer) As String Dim targetEncoding As Encoding Dim encodedChars() As Byte Dim strNew As String encodedChars = Encoding.Convert(Encoding.GetEncoding(OldCP),_ Encoding.GetEncoding(NewCp), Encoding.GetEncoding(1251).GetBytes(strText)) Dim i As Integer For i = 0 To encodedChars.Length - 1 strNew &= Chr(encodedChars(i)) Next i Return strNew End Function
Страница: 1 |
Вопрос: Оптимизация функции перекодировки текста (VB.NET)
Добавлено: 24.05.03 16:11
Автор вопроса: Chill | ICQ: 554200
Ответы
Всего ответов: 1
Номер ответа: 1
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #1
Добавлено: 12.12.05 20:17
Первое, что сразу бросается в глаза - это вот этот код:
For i = 0 To encodedChars.Length - 1
strNew &= Chr(encodedChars(i))
Next i[/code
В .NET строки константны. Поэтому, при выполнении конкатенации двух строк создаётся новая строка и в нее копируется содержимое исходных строк. Вышепреведенный код будет жутко тормозить. В подобных случаях следует использовать класс StringBuilder.
Да и вообще сам код далёк от совершенства - слишком много в нём лишних операций. Я использую в своих проектах такую функцию:
[code] Public Function ChangeEncoding(ByVal Source As String, ByVal SourceEnc As Int32, ByVal DestinationEnc As Int32) As String
Dim encoding1 As Text.Encoding = Text.Encoding.GetEncoding(SourceEnc)
Dim encoding2 As Text.Encoding = Text.Encoding.GetEncoding(DestinationEnc)
Return encoding2.GetString(encoding1.GetBytes(Source))
End Function