Страница: 1 |
Вопрос: Оптимизация функции перекодировки текста (VB.NET) | Добавлено: 24.05.03 16:11 |
Автор вопроса: ![]() |
Народ, подскажите, как можно оптимизировать данную функцию, и возможно ли это вообще? Просто, если я пытаюсь поменять кодировку в большом тексте ФУНКЦИЯ работает медленнее чем хотелось бы. =========================================================================== 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 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() Администратор ICQ: 326066673 Вопросов: 368 Ответов: 5968 |
Web-сайт: Профиль | Цитата | #1 | Добавлено: 12.12.05 20:17 |
Первое, что сразу бросается в глаза - это вот этот код:
Dim i As Integer
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 |
Страница: 1 |
|