2010-08-12 35 views
5

Trên một số trang sách ảnh tôi muốn hiển thị 20 hình thu nhỏ của appr. Các hình thu nhỏ này được tải theo chương trình từ cơ sở dữ liệu. những hình thu nhỏ đó đã được thay đổi kích thước. Khi tôi chỉ cho họ những hình ảnh tải kinda chậm. một số mất 0,5 giây để tải một số chờ đợi cho 2 secons. Cơ sở dữ liệu không quan trọng bởi vì khi tôi loại bỏ lớp cơ sở dữ liệu, vấn đề hiệu suất vẫn tồn tại. Khi tôi tải cùng một hình ảnh trực tiếp với html, vấn đề mà hình ảnh tải ngay lập tức.ASP.NET MVC tải hình ảnh chậm qua khung MVC?

Đang tải hình ảnh/tệp qua khung mvc chậm hoặc tôi thiếu gì đó?

này đi quá chậm

//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"); 
} 

này đi ngay lập tức

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

Trả lời

1

Bạn đang thêm xử lý chi phí bằng cách phơi bày hình ảnh qua MVC. Khi bạn trực tiếp liên kết đến một hình ảnh, nó được xử lý tự động bởi IIS, chứ không phải là đường dẫn MVC, vì vậy bạn bỏ qua rất nhiều chi phí.

Ngoài ra, bằng cách tải vào một mảng byte, bạn đang tải hình ảnh đầy đủ từ đĩa vào bộ nhớ và sau đó phát trực tuyến, thay vì chỉ phát trực tiếp từ đĩa.

Bạn có thể có được hiệu suất tốt hơn một chút với điều này:

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

Nhưng nó sẽ không phải là khá nhanh như bỏ qua MVC hoàn toàn cho các tập tin tĩnh.

Nếu sửa lỗi ở trên cho bạn, có thể bạn sẽ muốn gây rối với các thông số bộ nhớ đệm.

+0

vẫn còn, vấn đề về hiệu suất vẫn tồn tại. rất kì lạ. nó chỉ đi quá chậm để chỉ cần đặt nó trên tất cả các chi phí mvc. – MichaelD

+1

Điều khác cần xem xét là liệu trình duyệt có được lưu trong bộ nhớ cache hay không. Nó chắc chắn sẽ được lưu trữ để truy cập trực tiếp vào tập tin, nhưng nó có thể là nó buộc phải tải các tập tin mỗi khi sử dụng một phương pháp hành động. Tôi sẽ cập nhật đề xuất của tôi để thêm bộ nhớ đệm. –

9

Tôi gặp vấn đề tương tự. Tôi đang sử dụng MVC 3. Sau khi kéo tóc ra, những gì tôi phát hiện ra là khi bạn sử dụng Session State trong ứng dụng web của bạn, tải hình ảnh động dường như bị tắc, do yêu cầu phiên đập. Để khắc phục điều này, tôi được trang trí điều khiển của tôi với:

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

này vô hiệu hóa các trạng thái phiên cho bộ điều khiển hình ảnh của tôi, và tốc độ quay trở lại. Nếu bạn đang sử dụng một phiên bản cũ của MVC, bạn sẽ cần phải nhảy qua một số hoops và tạo ra một Controller/Controller factory để làm điều này. Xem How can I disable session state in ASP.NET MVC?

Hy vọng điều này sẽ hữu ích!

+0

Vô hiệu hóa trạng thái phiên trên bộ điều khiển đã khắc phục sự cố này cho tôi. Hy vọng rằng vấn đề này có thể được giải quyết bởi nhóm MVC, bởi vì tôi chắc chắn rằng trạng thái phiên là quan trọng trong một số trường hợp. – joelsand

+0

Bạn vừa lưu lại ngày của tôi! Có chính xác cùng một vấn đề và vô hiệu hóa trạng thái phiên cố định nó, nhưng có nghĩa là vấn đề vẫn còn đó trong MVC 4. FYI: Tôi cần "MVC overhead" vì các hình ảnh không được truy cập công khai và hành động của tôi kiểm tra quyền người dùng và sau đó trả về hình ảnh nếu anh được phép. Tái bút: Tôi đã có trải nghiệm này chỉ gặp tôi khi tải nhiều hình ảnh cùng một lúc, nhưng không phải khi tải một hình ảnh ... – ChrFin

Các vấn đề liên quan