Когда изображение маленькое или трафик незначительный, любой из методов, упомянутых выше, работает, и они отлично справляются с демоверсией.Вещи начинают выходить из-под контроля, когда размер изображения увеличивается, потому что все эти решения требуют, чтобы все изображение было сохранено в виде байтового массива в памяти.Если нагрузка на сервер значительна, наличие всех этих копий файлов изображений, занимающих ценное пространство адресного пространства процесса, увеличивает объем и может существенно повлиять на производительность.
Это , из которого можно читать избаза данных с семантикой потока, так что полная копия файла никогда не сохраняется в памяти:
Предоставляет DataReader способ обрабатывать строки, содержащие столбцы с большими двоичными значениями.Вместо загрузки всей строки SequentialAccess позволяет DataReader загружать данные в виде потока.Затем вы можете использовать метод GetBytes или GetChars, чтобы указать местоположение байта для запуска операции чтения, и ограниченный размер буфера для возвращаемых данных.
Последний пункт немного проблематичен.Вы можете либо записать поток в локальную папку WWW-сервера, которая фактически сопоставлена с сайтом, а затем вернуть URL-адрес этого файла.Или у вас может быть URL, который читает само изображение и записывает изображение прямо в кэш вывода ASP.Первый метод может окупиться за часто используемые изображения, так как кэшированный файл может обслуживать несколько запросов, но требует логики аннулирования и очистки.Второй метод лучше подходит для ненужных обращающихся к нему изображений, но требует правильной логики маршрутизации в вашем приложении.
Когда все становится действительно горячим, возникает проблема блокирования потоков при маршалинге этих изображений, и вам придетсяперейти на Асинхронные страницы , модель, которая идеально соответствует семантике потокового копирования.