Вы добавляете накладные расходы обработки, выставляя изображение через MVC. Когда вы напрямую ссылаетесь на изображение, оно автоматически обрабатывается IIS, а не конвейером MVC, поэтому вы пропускаете много накладных расходов.
Кроме того, загружая в байтовый массив, вы загружаете полное изображение с диска в память и затем выводите его, а не просто воспроизводите прямо с диска.
Вы можете получить чуть лучшую производительность с этим:
[OutputCache(Duration=60, VaryByParam="*")]
public FileResult File(string ID)
{
string pathToFile;
// Figure out file path based on ID
return File(pathToFile, "image/jpeg");
}
Но это будет не так быстро, как пропуск MVC для статических файлов.
Если вышеприведенное исправит это для вас, вы, вероятно, захотите возиться с параметрами кэширования.