2012-10-25 12 views
10

Mam ten widok MVC, który ma listę obrazów, obrazy te są dynamiczne, więc pochodzą od kontrolera. Aby uprościć rzeczy, kontroler ma tylko ten kod:Dlaczego mój kontroler MVC zwalnia podczas wyświetlania obrazów

[OutputCache(Duration = 0, NoStore = true, Location = OutputCacheLocation.None)] 
    public ActionResult RenderImage(int id) 
    { 
    return File(@"C:\Users\Pictures\myimage.png", "image/png"); 
    } 

Nie przechowuję danych, aby udowodnić moją rację.

moim zdaniem wnioski 8 zdjęć wszystkie z innym ID, i czasy są straszne:

timings

Czasem szybko dla niektórych obrazów (które są takie same), a na każde odświeżenie jest inaczej, nie można znaleźć w nim wzorca.

Aplikacja jest obsługiwana w IIS i timetaken w dziennikach serwerów pokazuje to serwer, który pochłania czas:

enter image description here

Czy ktoś ma pojęcia, dlaczego tak się dzieje? Jeśli poprosię o obrazy indywidualnie (nie na stronie), zawsze jest to szybkie.

+1

Typowym problemem - który nie wyjaśnia wszystkiego tutaj - jest to, że przeglądarka używa dwóch lub czterech równoległych połączeń w celu pobrania obrazów, ale program ASP.NET zablokuje wszystkie oprócz jednego, ponieważ dostęp do stanu sesji wymaga wyłącznego blokowania. Jeśli nie potrzebujesz dostępu do stanu sesji obrazów, możesz je zadeklarować i pozbyć się wyłącznej blokady. – Codo

+0

Może to być I/O na dysku. Możesz spróbować załadować zawartość C: \ Users \ Pictures \ myimage.png do bajtu [], przechowując go w pamięci i zwracając go, aby sprawdzić, czy to jest problem (oczywiście nie jest to "produkcja", ale to może pomóc w debugowaniu) – Alex

+0

Możliwym powodem może być zablokowana metoda. Postaraj się zrobić wielowątkowe i sprawdź, czy to pomaga? –

Odpowiedz

3

Okazuje się, że jest to rozwiązanie w moim przypadku:

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

user1394965 zasugerował to jako odpowiedź .. ale jego odpowiedź nie ma ?!

+0

Readonly pomoże również, zamiast Wyłączone btw – Flores

Powiązane problemy