2010-06-10 33 views
6

Tôi đã phát triển một trò chơi sử dụng Silverlight 4 và silversprite (http://silversprite.codeplex.com/)Optimize tải một file XAP với một trang web asp.net

trò chơi này là rất nhiều nội dung phụ thuộc, sử dụng rất nhiều âm thanh và hình ảnh. Thư mục nội dung của tôi có giá trị khoảng 90 mbs. Và do đó, tệp XAP của tôi là khoảng 60 MB và mất 5 phút để tải xuống từ trang web trước khi bất kỳ người dùng nào có thể bắt đầu chơi.

Tôi đang sử dụng Visual Web Developer 2010 để tạo trang web của mình và tải XAP. Có cách nào tôi có thể đưa nội dung ra khỏi XAP của tôi và đặt nó trong dự án trang web ASP.net của tôi? Hoặc có thể tải các tệp nội dung của tôi lên bộ nhớ của trang web? Điều này sẽ làm cho tệp XAP của tôi tải xuống nhanh hơn rất nhiều.

Mọi người đều có đề xuất? Cảm ơn!

Trả lời

3

Absolutley được gọi là Application Library Caching. Ive sử dụng nó rất thành công của nó bây giờ là một thủ tục hoạt động tiêu chuẩn, đặc biệt tốt đẹp là ứng dụng của nó với các hội đồng tài nguyên.

trực tiếp từ MSDN ...

file Resource thường bất kỳ tập tin dữ liệu không thực thi được sử dụng bởi ứng dụng của bạn, chẳng hạn như tập tin hình ảnh, âm thanh và video. Tệp tài nguyên cũng có thể có ý nghĩa cụ thể trong các ngữ cảnh nhất định. Ví dụ: trong ngữ cảnh của bản địa hóa ứng dụng, tệp tài nguyên tham chiếu đến các tệp .resx, mà bạn có thể triển khai trong các cụm vệ tinh được bản địa hoá.

nó tiếp tục với một số thông tin thực sự hữu ích

Với Silverlight, bạn có thể triển khai file tài nguyên trong các cách sau:

• file Là cá nhân trong gói ứng dụng.

• Là các tệp riêng lẻ mà bạn truy xuất theo yêu cầu.

• Là tệp được nhúng trong một hội đồng trong gói ứng dụng.

• Là tệp được nhúng trong một hội đồng trong gói thư viện bên ngoài.

• Là tệp được nhúng trong một hội đồng mà bạn truy xuất theo yêu cầu.

đó là những gì được gợi ý trong câu trả lời khác (s)

+0

Điều này không thực sự giúp ích gì nhiều trong trường hợp này. Nó rất hữu ích khi thay đổi xap của bạn kể từ khi các khóa thư viện hiện có vẫn giữ nguyên và thường không cần tải xuống lại. Tuy nhiên, nếu chúng bị loại ra khỏi bộ nhớ cache của trình duyệt hoặc lần đầu tiên một khách hàng truy cập tất cả các thư viện được tải xuống trước khi ứng dụng tải. Sẽ tốt hơn nếu Silverlight có thể xác định thư viện nào là cần thiết và những thư viện nào không bắt đầu nhưng nó thì không. – AnthonyWJones

+1

thực sự bạn có thể tạo thư viện riêng (có thể chứa bất kỳ thứ gì bạn muốn) và có khung điều khiển bộ nhớ đệm (không tệ :)), không có cách nào khác trừ khi bạn ra khỏi trình duyệt hoặc yêu cầu thêm không gian người dùng cả hai đang chập chờn (và cố gắng để được như vậy) –

+0

cũng cú pháp khôn ngoan của nó rất nhiều thân thiện hơn như bạn sẽ sử dụng một wrapper tài nguyên tạo ra cho bạn. –

4

Vâng, bao gồm trong XAP của bạn chỉ nội dung mà bạn cần cho màn hình ban đầu. Đặt nội dung khác mà bạn cần trong các XAP khác (nếu bạn cần và hiểu tệp kê khai xml) hoặc chỉ các tệp zip đơn giản sẽ thực hiện. Có lẽ một Zip cho mỗi "Cấp" hoặc bất cứ điều gì.

Bạn có thể tải xuống Zip với WebClient và sau đó sử dụng StreamResourceInfoApplication.GetResourceStream để truy cập nội dung trong tệp zip.

Điều này blog mặc dù lão hóa một chút hiện vẫn mang ý tưởng cơ bản và vẫn còn là kỹ thuật hiện tại về mặt cơ bản để sử dụng.

+0

Tôi đã xem xét phương pháp này VÀ nó có vẻ tuyệt vời! Mặc dù tôi có một tình huống cụ thể: Tôi đang lập trình trong Silversprite, không phải là Silverlight thuần túy: điều này có nghĩa là tôi không mã hóa trò chơi của mình trong các tệp xaml. XAP của tôi bao gồm một tệp C# .cs thuần túy. Vì vậy, điều này làm cho nó rất khó. Tôi có một dự án trang web và dự án Silverlight (silversprite) của tôi trong cùng một giải pháp. Vì vậy, đây là những gì tôi đang tự hỏi: Tùy chọn # 1: WITHIN dự án silersprite của tôi, tôi sử dụng Texture2D.FromFile, và tải một kết cấu từ trang web bên ngoài của tôi. Tùy chọn # 2: Tôi tham khảo và tải kết cấu từ dự án WEBSITE của tôi. Bạn có lời khuyên nào không? – theoneawaited

+0

@thwoneawaited: Cho dù bạn đang sử dụng Xaml hay chủ yếu C# phần lớn XAP của bạn sẽ là các tài nguyên như hình ảnh, âm thanh, vv Những gì tôi gợi ý là bạn đặt các tài nguyên này trong các tệp zip riêng biệt. Bạn có thể sử dụng các phương thức như Texture2D.FromFile để tải từ một luồng. Dòng này lần lượt được mua lại bằng 'Application.GetResoureStream'. – AnthonyWJones

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