Это действительно зависит от компилятора. Я был бы удивлен, если бы большинство современных компиляторов Си не генерировали практически идентичный код для конкретного сценария, который вы описываете.
Получите ваш компилятор для генерации списка сборки для каждого из этих сценариев, и вы можете ответить на свой вопрос (для вашего конкретного компилятора:)).
И даже если они различаются , разница в производительности, вероятно, будет несущественной в практических приложениях.
Я не понимаю, что это могло быть связано с maxRequestLength. Код находится в середине FileStream.Write, поэтому вопрос о получении данных уже давно не возникает. Подтвердите это, посмотрев на Data.Length в отладчике.
Почему у вас WebMethod (правда)? Попробуйте просто [WebMethod] и посмотрите, что произойдет.
maxRequestLength 409600 ограничит размер данных примерно до 400 КБ, поэтому файл размером 2 МБ будет значительно превышать
Ребята из GuidanceShare хорошо обсуждают подобную ситуацию. Вкратце:
HttpContext.Current.Response.BufferOutput = false;
в коде на стороне клиента. .NET будет автоматически отправлять элементы списка один за другим, поэтому каждый элемент списка может быть буфером размером 1 Кбайт. Что ж, тогда это отвлекающий маневр! Спасибо за комментарии, кажется, я ошибаюсь.
WriteAllBytes загружает весь файл в ОЗУ перед записью его на диск. У вас заканчивается память.
I know you are not reaching this size of file but also be aware that File.WriteAllBytes has a limit of 64mb when writing to network paths - see this connect issue