Для экономии памяти вы можете конвертировать поток байтов в 3 пакета. Каждые три байта выдают 4 байта в Base64. Вам не нужен весь файл в памяти сразу.
Вот псевдокод:
Repeat
1. Try to read max 3 bytes from stream
2. Convert to base64, write to output stream
И простая реализация:
using (var inStream = File.OpenRead("E:\\Temp\\File.xml"))
using (var outStream = File.CreateText("E:\\Temp\\File.base64"))
{
var buffer = new byte[3];
int read;
while ((read = inStream.Read(buffer, 0, 3)) > 0)
{
var base64 = Convert.ToBase64String(buffer, 0, read);
outStream.Write(base64);
}
}
Подсказка: допустимо каждое умножение на 3. Выше - больше памяти, лучше производительность, меньше - меньше памяти, хуже производительность.
Дополнительная информация:
Файловый поток является примером. В результате поток использует [HttpContext].Response.OutputStream
и пишет прямо в него. Обработка сотен мегабайт в одном блоке убьет вас и ваш сервер.
Подумайте об общих требованиях к памяти. 100 МБ в строке приводит к 133 МБ в байтовом массиве, так как вы писали о модели, я ожидаю копию этого 133 МБ в ответ. И помните, это просто простая просьба. Несколько таких запросов могут истощить вашу память.