Страница: 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