Сильные тормоза

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Сильные тормоза

Сообщение MIT » 25.11.2006 (Сб) 22:25

Вот перевел свою прогу для просмотра игровых архивов на .NET, и появилась проблема:
код
Код: Выделить всё
For i = 0 To CountOfFilesInArchive - 1
   Get FN, , FileNameInArchive
   If i < CountOfFilesInArchive - 1 Then
        Get FN, , ofs
        Get FN, , FilesInArchive(i + 1).FileSize
        FilesInArchive(i + 1).offset = ofs * 2048 'FilesInArchive(i).FileSize * 2048 + FilesInArchive(i).Offset
   End If
   FilesInArchive(i).FileName = getFileName_img(FileNameInArchive)
   Set itmx = .Add(, , FilesInArchive(i).FileName)
   itmx.SubItems(1) = Rasshirenie(FilesInArchive(i).FileName, 2))
   itmx.SubItems(2) = MyF(Hex(FilesInArchive(i).offset))
   itmx.SubItems(3) = FilesInArchive(i).FileSize * 2 & " kb"
Next i

на VB6 работает довольно быстро - 17000 элементов загружается примерно 8 секунд, а код
Код: Выделить всё
For i = 0 To CountOfFilesInArchive - 1
    frmMain.Tpb1.Value = i
    FileGet(FN, FileNameInArchive)
    If i < CountOfFilesInArchive - 1 Then
         FileGet(FN, ofs)
         FileGet(FN, FilesInArchive(i + 1).FileSize)
         FilesInArchive(i + 1).offset = CStr(ofs * 2048)
    End If
    FilesInArchive(i).FileName = getFileName_img(FileNameInArchive)
    itmx = .Add(FilesInArchive(i).FileName)
    itmx.SubItems.Insert(1, New System.Windows.Forms.ListViewItem.ListViewSubItem(Nothing, Rasshirenie(FilesInArchive(i).FileName, 2)))
    itmx.SubItems.Insert(2, New System.Windows.Forms.ListViewItem.ListViewSubItem(Nothing, MyF(Hex(CInt(FilesInArchive(i).offset)))))
    itmx.SubItems.Insert(3, New System.Windows.Forms.ListViewItem.ListViewSubItem(Nothing, FilesInArchive(i).FileSize * 2 & " kb"))
Next i

на .NET, в который VS2005 автоматически перевел предыдущий код загружает те же 17000 элементов за 30-50 секунд
Откуда тормоза и как оптимизировать?
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Сообщение gaidar » 26.11.2006 (Вс) 13:19

Нужно использовать стандартные для .NET I/O функции. Почитайте в MSDN о FileStream.
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Сообщение MIT » 26.11.2006 (Вс) 23:57

Спасибо.
А как с помощью FileStream рботать с несколькими файлами одновременно?
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

mad_Max
Бывалый
Бывалый
 
Сообщения: 203
Зарегистрирован: 15.09.2002 (Вс) 21:17
Откуда: Russia, Cherepovets

Сообщение mad_Max » 27.11.2006 (Пн) 2:16

MIT писал(а):Спасибо.
А как с помощью FileStream рботать с несколькими файлами одновременно?

Создать по одному FileStream на файл.


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 91

    TopList