Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Оптимизация функции перекодировки текста (VB.NET) Добавлено: 24.05.03 16:11  

Автор вопроса:  Chill | ICQ: 554200 

Народ, подскажите, как можно оптимизировать данную функцию, и возможно ли это вообще? Просто, если я пытаюсь поменять кодировку в большом тексте ФУНКЦИЯ работает медленнее чем хотелось бы.

===========================================================================

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-сайт: www.vbnet.ru
 Профиль | | #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 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам