Ранее я использовал это:
В этом коде нет утечки .Проблема заключается в том, что он загружает все изображение в память, а затем передает его в ответ.Память увеличивается, которую вы наблюдаете, чтобы процесс w3p был нормальным, и как только сборщик мусора пнул его, он очистит его.Вам не стоит беспокоиться об этом, если вы не передаете несколько очень больших изображений.
Проблема с вашим дизайном заключается в том, что вы используете base64, что означает, что вам нужно загрузить все содержимое, прежде чем вы сможете декодировать его обратно.в байтовый массив.Другой подход состоял бы в том, чтобы сохранить изображения в виде необработанных данных в вашей базе данных, а затем использовать потоки для чтения их в виде фрагментов и немедленной записи этих фрагментов в ответ.Таким образом, в текущий момент времени в память загружается только обрабатываемый в данный момент чанк .
Еще один подход, который я могу предложить, заключается в том, чтобы вообще не хранить изображения в базе данных, кромесохраните их в файловой системе и сохраните только путь к изображению в базе данных.Тогда в вашем действии контроллера все, что вам нужно сделать, это return File(pathToTheImage, "image/jpeg")
.
В качестве дополнительной оптимизации, если эти изображения не изменяются часто, вы можете добавить правильное выходное кэширование в действие контроллера, обслуживающее эти изображения, чтобы избежатьбить его каждый раз.