मैं एसडीकार्ड पर संग्रहीत फ़ाइलों के मिश्रण के साथ एक सूची दृश्य को पॉप्युलेट करने और एपीके में संपत्ति के रूप में संग्रहीत करने की कोशिश कर रहा हूं। TraceView
का उपयोग करके, मैं देख सकता हूं कि AssetManager.list()
का प्रदर्शन File.listFiles()
की तुलना में खराब है, भले ही मैं SDcard के लिए फ़ाइल नाम फ़िल्टर का उपयोग कर रहा हूं।AssetManger.list() इतनी धीमी क्यों है?
यहाँ एक सरल विधि है कि एसडी कार्ड पर एक फ़ोल्डर से सभी PNG फ़ाइलें देता है:
// The folder on SDcard may contain files other than png, so filter them out
private File[] getMatchingFiles(File path) {
File[] flFiles = path.listFiles(new FilenameFilter() {
public boolean accept(File dir, String name) {
name = name.toLowerCase();
return name.endsWith(".png");
}
});
return flFiles;
}
मुझे लगता है कि विधि यहाँ आह्वान और यह 16 फ़ाइलों को पुनः प्राप्त करने के लिए 12ms के बारे में लेता है:
final String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)||Environment.MEDIA_SHARED.equals(state)) {
File path = Environment.getExternalStoragePublicDirectory(getResources().getString(R.string.path_dir));
if (path.exists()){
File[] files = getMatchingFiles(path);
...
जबकि am.list विधि को केवल 6 फाइलों के नाम पुनर्प्राप्त करने के लिए 49ms लगते हैं!
// Get all filenames from specific Asset Folder and store them in String array
AssetManager am = getAssets();
String path = getResources().getString(R.string.path_dir);
String[] fileNames = am.list(path);
...
क्या कोई समझा सकता है कि प्रदर्शन इतना खराब क्यों होगा? क्या एपीके में संग्रहीत संपत्तियों की संख्या के अनुपात आनुपातिक है? मुझे पता है कि संपत्ति संपीड़ित होती है, लेकिन मैं केवल संपत्तियों के नाम ला रहा हूं, जिसे मैंने सोचा था कि कहीं किसी तालिका में संग्रहीत किया जाएगा।
पर प्रतिबद्ध आप काफी पता है कि आपकी संपत्ति फ़ोल्डर में है अपेक्षा की जाती है – njzk2
AssetManager बेकार है और प्रदर्शन गरीब है। मेरे पास subfolders में संपत्तियों में लगभग 7.5K फ़ाइलें हैं। वे संपत्ति में हैं क्योंकि वे बाहरी स्रोत और रखरखाव ओवरहेड (फाइलों का नामकरण) आदि से हैं और उन्हें संसाधनों में डालने का प्रदर्शन हिट स्वीकार्य नहीं है। इस संरचना में फ़ाइलों को खोजने के लिए, मुझे इसे फिर से खोजना होगा और प्रदर्शन, भयानक है, जैसा कि आप कहते हैं, मुख्य रूप से .list() के आसपास। ऐसा लगता है कि डिजाइनरों ने कभी भी उन ऐप्स के बारे में सोचा नहीं जो बड़ी मात्रा में स्थिर डेटा का उपयोग करते हैं। मैं इसे ब्याज के साथ देखूंगा। – Simon