FileStream + Remoting + ReadByte + WriteByte

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

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

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

FileStream + Remoting + ReadByte + WriteByte

Сообщение Williams » 13.10.2008 (Пн) 15:37

Столкнулся со следующей проблемой.
При помощи Remoting получаю открытый FileStream на сервере.
Далее открываю другой файлстрим, для записи. fs - стрим полученный с помощью remoting, fWriter - открыт для записи.

Следующий код работает катастрофически медленно:

Код: Выделить всё
        For i As Integer = 0 To fs.Length
            fWriter.WriteByte(fs.ReadByte)
        Next


Вопрос - почему?

Может быть тут собака зарыта?

Notes to Implementers:

The default implementation on Stream creates a new single-byte array and then calls Read. While this is formally correct, it is inefficient. Any stream with an internal buffer should override this method and provide a much more efficient version that reads the buffer directly, avoiding the extra array allocation on every call.


Создавать буфер в памяти нет желания, т.к. файлы могут быть большими.
И вы думаете, что вас оставят в живых после прочтения этого поста?

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Re: FileStream + Remoting + ReadByte + WriteByte

Сообщение Sebas » 13.10.2008 (Пн) 15:51

дык, по байту пишешь! ПИши по 1к хотяб или поболе
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: FileStream + Remoting + ReadByte + WriteByte

Сообщение Williams » 13.10.2008 (Пн) 16:14

Так нормально будет?

Код: Выделить всё
  Dim ChunkSize As Integer = 100000
        Dim ReadBytes As Long = fs.Length

        Dim Buff As Byte() = New Byte(ChunkSize - 1) {}

        While ReadBytes > 0

            ReadBytes = CLng(fs.Read(Buff, 0, ChunkSize))
            If ReadBytes > 0 Then

                fWriter.Write(Buff, 0, CInt(ReadBytes))

            End If

        End While
И вы думаете, что вас оставят в живых после прочтения этого поста?


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

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

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

    TopList