Убрал старый вопрос и переписал полностью, потому что я немного поработал над этим, чтобы определить проблему. Моя проблема в том, что я пишу пользовательскую CMS с настраиваемым сервером с очень высокой скоростью/тщательностью в качестве цели, однако я замечаю, что некоторые данные или шаблоны данных вызывают серьезные замедления (переход от 0 до 55 + мс ответ время). Мне действительно нужен кто-то лучше, чем я помогаю в этом, так как я абсолютно не понимаю, что происходит, я подозреваю ошибку в .net Framework, но я понятия не имею, где это может быть, небольшой просмотр кода .net я не предполагал, что выходной поток делает что-то специфическое для данных
Вещи, которые я тестировал и уверен, не являются проблемой:
- Размер содержимого (более крупное содержимое быстрее)
- Тип содержимого (разница между теми же типами контента)
- Большая часть окружающего кода (сделанная минималистским проектом для воспроизведения ошибки, стоящая около 15 строк, находит ссылку внизу сообщения, включает в себя данные для ее воспроизведения, запускает ее, тестирует с 2 URL-адресами, см. себя).
- Не проблема с веб-страницами/кешем и т.д., проблема с воспроизведением с одним изображением и CTRL + F5 в Firefox, удаление последних нескольких байтов изображения исправляет его в 100% случаев, добавив их обратно, снова вызывает проблему
- Не проблема, которая существует вне выходного потока (заменяя его целевым запоминающим устройством, не показывает проблему)
Как воспроизвести проблему:
- Загрузите и запустите проект
- Используйте свой любимый браузер и перейдите на localhost: 8080/magicnumber
- замените magicnumber в этом URL-адресе тем, что вы хотите, вы получите обратное изображение минус это количество байтов
Мой результат:
- Постоянная 50 мс или около того с этим изображением
- Получение магического номера до 1000 не влияет на это вообще
- немного дальше (я думаю, около 1080 иш?) он suddently падает до 0MS
- Не уверен, что происходит, но кажется, что есть два запроса на запрос, по крайней мере, при использовании CTRL + F5 в Firefox, в правильном случае оба равны 0 мс, в случае ошибки первое остается 0 мс, а второе - 50 мс, Я предполагаю, что первый из них просто проверяет, нормально ли кеш файл, и я все еще отвечаю, но Firefox закрывает соединение или что-то в этом роде.
Любая помощь очень ценится, помещая весь мой репут на Bounty, так как мне действительно нужно знать, могу ли я пойти по этому пути/получить больше информации, чтобы сообщить об этом, или если я пойду на более низкий уровень и сделаю свой собственный http.sys interop ( и, прежде всего, если ошибка будет только на стороне .net или ниже, а нижний уровень не исправит ее!)
Образец файла представляет собой массив gziped, мой контент предварительно кэшируется и предварительно сжимается в db, поэтому это представление данных, которые мне нужно отправить.
https://www.dropbox.com/s/ao63d7din939new/StackOverFlowSlowServerBug.zip
Изменить: если у меня есть скрипт, проблемный тест вернется к 0 мс, я не уверен, что делать с ним до сих пор, это означает, что я получаю значительное замедление при отправке некоторых данных, что не определяемый типом данных, но фактическими данными, и это не происходит, если у меня есть скрипач между ними. Я в потере!
Редактировать 2: Протестировано другим браузером, чтобы быть уверенным, и на самом деле он вернулся к 0 мс в IE, поэтому я предполагаю, что это может быть не ошибка HttpListener, но вместо этого ошибка Firefox, я отредактирую свой вопрос и теги в сторону что, если никто не предлагает иного. Если это так, кто-нибудь знает, где я должен искать код FF, чтобы понять проблему? (это определенно проблема, даже если на их стороне, так как я снова сравниваю с 2 файлами, один больше, чем другой, тот же формат файла, самый большой из них всегда занимает 0 мс, самый маленький - всегда 55 мс!)