Как уменьшить использование памяти сервера при загрузке больших файлов в ASP.NET? - PullRequest
2 голосов
/ 18 октября 2011

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

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

Ответы [ 3 ]

1 голос
/ 18 октября 2011

Я дам вам ссылку: http://neatupload.codeplex.com/ Это очень хорошо.Посмотрите, хватит ли вам этого.

Здесь есть даже интересная статья в блоге: http://weblogs.asp.net/jgalloway/archive/2008/01/08/large-file-uploads-in-asp-net.aspx, посвященная различным проблемам загрузки больших файлов.

0 голосов
/ 18 октября 2011

То, о чем вы здесь говорите, - потоковая передача по сравнению с буферизацией.

если в приложении ASP.NET есть строка byte[] buffer = ...; для загрузки или выгрузки, вы выполняете буферизацию и испытываете проблемы с памятью, о которых вы упоминали в своем вопросе. Фактически, вы можете иногда вызывать GC напрямую для принудительного освобождения памяти, но есть статьи, блоги, люди и мнения абсолютно против этого.

вариант с потоковой передачей, безусловно, является наилучшим способом, учитывая, что SQL Server 2008 изначально поддерживает ввод-вывод FILESTREAM, а потоковую передачу можно также выполнять с помощью WCF.

Множество статей в Интернете о потоковой передаче WCF и SQL Server, я не могу точно знать, что именно вам нужно, так как вы не сообщаете более подробную информацию о своем коде и не показываете какой-либо код.

0 голосов
/ 18 октября 2011

Мне также нужно было загрузить несколько больших файлов на сервер. В конце концов я сделал сервис WCF и использовал клиент Silverlight для загрузки файлов. Файлы были разрезаны на куски по 128 КБ и загружены. Таким образом, я мог бы также показать хорошую строку прогресса и, если загрузка была повреждена (я также отправляю хэш md5 части), я могу легко загрузить часть снова, вместо того, чтобы снова загружать весь файл.

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