2010-08-01 7 views
3

Я задавался вопросом, есть ли разница в производительности (или любой другой важный фактор) между файлом отправляется в браузер с нашего сервера с помощью этого метода:Отправка двоичного потока в браузере клиентов

For i = 1 To fileSize \ chunk 
    If Not Response.IsClientConnected Then Exit For 
    Response.BinaryWrite stream.Read(chunk) 
    Response.Flush 
Next 

В.С.

старый способ доступа к файлам, с которым поставляется IIS.

Мы работаем над обработчиком файлового менеджера по соображениям безопасности и хотели бы знать, что такое производительность.

+0

Какие типы контента вы отправляете, каков типичный диапазон размеров, сколько одновременных загрузок можно ожидать, насколько часто. – AnthonyWJones

ответ

2

Если вы не имеете дело с довольно большим файлом, не должно быть заметной разницы. Поскольку вы создаете куски вручную и очищаете буфер, у вас будет больше трафика пакета для клиента (полезная нагрузка пакета или последнего пакета будет только частично заполнена). Однако, как я уже сказал, это, вероятно, не будет заметно, если у вас нет большого файла, и даже тогда он вряд ли появится.

+0

В прошлый раз, когда я тестировал этот флажок, он блокируется до тех пор, пока не будут получены все ACK для покрасневших пакетов. Задержка, связанная с этим, приводит к значительно большему времени загрузки, которое вы могли бы подумать иначе. Возможно, что IIS7 может изменить это поведение. Использование большого размера буфера (например, 64 КБ) может свести к минимуму как влияние этой задержки, так и количество отправленных дополнительных пакетов. – AnthonyWJones

+0

Я очень старался не отвечать с помощью «Это зависит» :) Были внесены некоторые изменения между IIS 5 + 6, но есть некоторые дополнительные факторы: подсчитываете ли вы производительность как производительность запуска сценария на стороне сервера , общее время от запроса до доставки, загрузка ресурса на сервере? В то время как блокировка произойдет, сумма зависит от количества данных, которые вы очищаете (как вы указываете ниже), все это будет зависеть от размера файлов (в этот момент вам необходимо сбалансировать использование памяти на сервере от блокировки/network latency/under-sizing packets) и т. д. – Tarwn

+0

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

2

Оба метода должны вставлять двоичные данные в браузер.

хотел бы знать, что является хитом производительности.

Как всегда в таких случаях: мера. Попытайтесь оптимизировать настройки в IIS и снова измерьте, пока не получите оптимальное решение.

+0

Какие настройки в IIS будут оптимизированы для получения максимальной производительности в этом случае? – AnthonyWJones

0

По моему опыту, сбрасывание содержимого с использованием скрипта значительно медленнее, чем оптимизированная обработка статических файлов IIS. Насколько медленнее зависит от слишком многих факторов, которые я видел до 10 раз, когда были сделаны другие плохие выборы (например, использование 4096 байт в качестве размера буфера).

Некоторые вещи могут быть улучшены на IIS7, но если вы можете получить файл как статический контент, я бы определенно пошел с этим.

Смежные вопросы