asp.net c # отправка двоичных файлов для решения проблем со скоростью клиента - PullRequest
1 голос
/ 25 сентября 2010

У меня есть 2 разных класса, которые я тестирую для отправки файлов в браузер.Первый в http://pastebin.org/1187259 использует заголовки, зависящие от диапазона, чтобы обеспечить возобновление

Второй в http://pastebin.org/1187454 использует чтение чанков для отправки больших файлов.
Оба прекрасно работают содин другой.Первый способ намного медленнее второго в смысле скорости загрузки.С первым я не могу пройти более 80 КБ / с, со вторым я могу получить как можно быстрее.

Я провел несколько тестов, и результат был таким же.Это иллюзия или что-то на первом замедляет скорость загрузки?

Я также заметил, что первый, кажется, блокирует другие запросы.Например, если я запрашиваю файл с сервера с первым сервером, он не будет отвечать на мой другой запрос до завершения загрузки.Даже если я запрашиваю другую страницу.Это не происходит, если я открываю разные сессии из разных браузеров.

Спасибо.

1 Ответ

1 голос
/ 05 октября 2010

Наконец-то! Мне удалось исправить проблему, добавив EnableSessionState = "ReadOnly" на страницу загрузки.

См. http://www.guidanceshare.com/wiki/ASP.NET_2.0_Performance_Guidelines_-_Session_State

"Используйте атрибут ReadOnly, когда можете

Для страниц, которым нужен только доступ для чтения к данным сеанса, рассмотрите возможность включения EnableSessionState для ReadOnly.

Почему

Запросы страницы, которые используют состояние сеанса внутри, используют объект ReaderWriterLock для управления данными сеанса. Это позволяет выполнять несколько операций чтения одновременно, когда блокировка не удерживается. Когда устройство записи получает блокировку для обновления состояния сеанса, все запросы на чтение блокируются. Обычно для каждого запроса делается два вызова в базу данных. Первый вызов подключается к базе данных, помечает сеанс как заблокированный и выполняет страницу. Второй вызов записывает любые изменения и разблокирует сеанс. Установив EnableSessionState в ReadOnly, вы избегаете блокирования и отправляете меньше вызовов в базу данных, тем самым повышая производительность. «

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...