Sumber daya file di MRM
Sumber daya file di MRM pada dasarnya sama dengan sumber daya String, kecuali pada runtime properti ResourceCandidate.Kind akan menjadi Jalur alih-alih String. Nilai sumber daya hanyalah string - nama file - dan bukan konten file aktual. Bahkan, dalam kebanyakan kasus file yang diindeks bahkan tidak perlu ada pada waktu build.
Jika aplikasi target Anda akan menggunakan runtime MRT bawaan (Windows.ApplicationModel.Resources), Anda dapat menggunakan ResourceCandidate.GetValueAsFileAsync atau ResourceCandidate.GetValueAsStreamAsync untuk menemukan dan memuat file secara otomatis untuk Anda. Jika Anda menggunakan MRT versi WinApp SDK (Microsoft.Windows.ApplicationModel.Resources) maka Anda harus memuat file secara manual sendiri. Anda juga dapat memilih untuk memuat file secara manual dengan runtime MRT buit-in.
Ada dua cara untuk menambahkan file ke pengindeks MRM:
- MrmIndexFile adalah fungsi yang paling umum dan fleksibel.
- MrmIndexFileAutoQualifiers secara otomatis menyimpulkan nama sumber daya dan kualifikasi dari nama file.
Perhatikan bahwa MrmIndexResourceContainerAutoQualifiers tidak menambahkan sumber daya file ke pengindeks; sebaliknya memuat file bernama pada build-time dan menyalin sumber daya yang disematkan ke pengindeks secara langsung.
Untuk alternatif mereferensikan file berdasarkan nama, Anda dapat menggunakan MrmIndexEmbeddedData untuk menyematkan data langsung dalam file PRI - lihat Data yang disematkan di bawah ini untuk informasi selengkapnya.
Tujuan utama sumber daya berbasis file adalah untuk meneruskan string ke fungsi seperti CreateFile(), fopen(), atau konstruktor std::fstream . Karena jalur akhir pada disk file biasanya tidak diketahui pada waktu build, nama file biasanya merupakan jalur relatif yang akan diselesaikan terhadap direktori kerja aplikasi (atau beberapa direktori terkenal lainnya) pada runtime. Meskipun dimungkinkan untuk menyertakan string arbitrer sebagai nama file (termasuk jalur absolut atau jaringan), ini biasanya tidak berguna.
Saat membuat pengindeks melalui salah satu fungsi MrmCreateIndexer... , Anda harus menentukan parameter projectRoot . Parameter ini digunakan oleh MrmIndexResourceContainerAutoQualifiers untuk menemukan file di disk untuk diurai, dan oleh MrmIndexFileAutoQualifiers untuk menghitung jalur relatif dari jalur absolut. Ini diabaikan oleh MrmIndexFile.
Menyematkan file sebagai data dapat mengurangi ruang penyimpanan yang diperlukan untuk aplikasi Anda dan meningkatkan performanya relatif terhadap mereferensikan nama file. Namun demikian, ada beberapa kelemahan untuk menggunakan fitur ini, terutama selama pengembangan aplikasi perulangan dalam.
Pada sistem Windows yang khas, setiap file membuang rata-rata ruang disk 2kb karena cara ruang disk dialokasikan. Untuk aplikasi yang berisi banyak file kecil (seperti ikon), rata-rata ini bisa lebih tinggi lagi. Dengan menyematkan data file biner langsung dalam file PRI, ruang per file ini tidak-.
Selain itu, memuat file sumber daya eksternal lebih lambat daripada membaca data biner langsung dari file PRI, karena setiap operasi pembukaan file memerlukan akses disk tambahan, pemeriksaan keamanan, dan sebagainya. File PRI selalu dimuat sebagai file yang dipetakan memori, sehingga mengakses data lebih cepat.
Terlepas dari manfaat ini, menggunakan data biner yang disematkan memiliki batasan, terutama selama pengembangan perulangan dalam:
- Waktu build ditingkatkan, karena file yang berisi data biner perlu dimuat dan ditambahkan ke pengindeks. Menambahkan sumber daya berbasis file tidak memerlukan akses disk tambahan pada waktu build (akses disk ditangguhkan hingga runtime).
- Men-debug masalah dengan file PRI (melalui cadangan XML) lebih sulit, karena alih-alih nama file yang dapat dibaca manusia, cadangan XML akan berisi data biner yang dikodekan BASE64. Selain itu, file cadangan XML akan jauh lebih besar, membuat debugging masalah apa pun lebih sulit.
- Karena konten file disematkan langsung dalam file PRI, tidak mungkin lagi untuk menukar aset dengan cepat. Setiap perubahan pada sumber daya yang disematkan akan memerlukan pembangunan ulang penuh dari file PRI. Karena sumber daya berbasis file hanya menyertakan nama file, file aset aktual dapat diperbarui kapan saja.
- Untuk aplikasi paket, sumber daya gambar yang tercantum di AppXManifest - seperti ikon Menu Mulai - tidak dapat disematkan dan harus ditentukan sebagai sumber daya file.
Untuk alasan ini, aturan umum praktis adalah menggunakan sumber daya berbasis file selama pengembangan perulangan dalam, tetapi pertimbangkan untuk menggunakan sumber daya biner yang disematkan untuk build produksi akhir (kecuali untuk sumber daya Manifes). Untuk aplikasi paket, pertimbangkan untuk menempatkan sumber daya AppXManifest (seperti ikon Menu Mulai) dalam directoy terpisah dari sumber daya lain untuk menyederhanakan proses build (sumber daya AppXManifest ditambahkan sebagai file, dan sumber daya lain yang ditambahkan sebagai data yang disematkan).