2010-08-12 6 views
5

일부 포토 북 페이지에서 20 개의 미리보기 이미지를 보여주고 싶습니다. 이 썸네일은 데이터베이스에서 프로그래밍 방식으로로드됩니다. 미리보기 이미지는 이미 크기가 조정됩니다. 내가 그들을 보여줄 때 이미지로드가 좀 느려집니다. 일부는 2 초 동안 기다리는 데 0.5 초가 걸립니다. 데이터베이스 레이어를 제거하면 성능 문제가 여전히 존재하기 때문에 데이터베이스는 중요하지 않습니다. 동일한 이미지를 HTML로 직접로드하면 이미지가 즉시로드됩니다.ASP.NET MVC 느린 이미지로드 MVC 프레임 워크를 통해?

mvc 프레임 워크를 통해 이미지/파일을로드하는 속도가 느리거나 무언가 빠졌습니까?

이것은

//in html 
<img src='/File/Image.jpg' border='0'>      

//in controller 
public FileResult File(string ID) 
{   
    //database connection removed, just show a pic 
    byte[] imageFile = System.IO.File.ReadAllBytes(ID); 
    return new FileContentResult(imageFile,"image/pjpeg"); 
} 

이렇게하면 MVC를 통해 화상을 노광에 의해 프로세싱 오버 헤드를 추가

<img src='/Content/Images/Image.jpg' border='0'>      

답변

1

즉시 이동 너무 느리게 진행한다. 이미지에 직접 링크하면 MVC 파이프 라인이 아닌 IIS가 자동으로 처리하므로 많은 오버 헤드를 건너 뜁니다.

또한 바이트 배열로로드하면 디스크에서 직접 스트리밍하는 대신 전체 이미지를 디스크에서 메모리로로드 한 다음 스트리밍합니다. 당신이 가진 약간 더 나은 성능을 얻을 수 있습니다

:

[OutputCache(Duration=60, VaryByParam="*")] 
public FileResult File(string ID) 
{ 
    string pathToFile; 
    // Figure out file path based on ID 
    return File(pathToFile, "image/jpeg"); 
} 

그러나 아주 빠른 속도로 정적 파일을 모두 MVC를 건너 뛰는 등이 될 것 아니에요.

위의 방법으로 해결할 수 있다면 캐싱 매개 변수를 사용하는 것이 좋습니다.

+0

여전히 성능 문제가 있습니다. 엄청 이상해. 그냥 mvc 오버 헤드에 모두 넣기에는 너무 느립니다. – MichaelD

+1

또 다른 고려해야 할 것은 브라우저에 의해 캐시되고 있는지 여부입니다. 그것은 파일에 직접 액세스하기 위해 반드시 캐쉬 될 것이지만, 액션 메소드를 사용할 때마다 파일을로드해야 할 수도 있습니다. 제안을 캐싱을 추가하여 업데이트하겠습니다. –

9

나는 동일한 문제가있었습니다. MVC 3을 사용하고 있습니다. 머리카락을 뽑아 낸 후 웹 응용 프로그램에서 세션 상태를 사용하면 세션 요청이 끊어지면서 동적 이미지로드가 막히는 것 같습니다. 이 문제를 해결하려면, 내가 내 컨트롤러를 장식 :

[sessionState의 (System.Web.SessionState.SessionStateBehavior.Disabled)]

내 사진 컨트롤러이 불가능 세션 상태 및 반환 속도. 이전 버전의 MVC를 사용하는 경우 일부 농구를 뛰어 넘고이를 수행하기 위해 컨트롤러/컨트롤러 팩토리를 만들어야합니다. How can I disable session state in ASP.NET MVC?

이 정보가 도움이 되었기를 바랍니다.

+0

컨트롤러에서 세션 상태를 비활성화하면이 문제도 해결됩니다. 세션 상태가 중요한 경우가 있기 때문에 MVC 팀에서이 문제를 해결할 수 있기를 바랍니다. – joelsand

+0

방금 ​​당신이 저의 하루를 구했습니다! 정확하게 똑같은 문제가 있었고 세션 상태를 사용하지 못하게했지만 문제가 MVC 4에 남아 있음을 의미합니다. 참고 : 이미지에 공개적으로 액세스 할 수 없으며 내 액션에서 사용자 권한을 확인한 후 "MVC 오버 헤드"가 필요했습니다. 그가 허용되면 이미지. P.S. .: 한 번에 여러 이미지를로드 할 때 경험이 있었지만 하나의 이미지를로드 할 때 발생하지는 않았습니다 ... – ChrFin

관련 문제