2015-04-20 2 views
2

Я работаю с музыкой в ​​музыкальной библиотеке в Windows Phone 8.1. Но есть проблема. Это слишком медленно. В Windows Phone 8.0 или 8.0 Silverlight, когда я использовал Microsoft.Xna.Framework.Media, это было очень быстро. Во время выполнения WP 8.1 я не могу использовать XNA, и мне нужно использовать KnownFolders.MusicLibrary. Например:Получить музыкальный файл в телефоне Windows 8.1 Среда слишком медленная

App.listMusicFiles = await KnownFolders.MusicLibrary.GetFilesAsync(CommonFileQuery.OrderByName); 

for (int i = 0; i < App.listMusicFiles.Count; i++) 
{ 
    MusicProperties musicProperties = await App.listMusicFiles[i].Properties.GetMusicPropertiesAsync(); 
App.listSongs.Add(new DeviceSongModel(i, musicProperties.Title, musicProperties.Artist, App.listMusicFiles[i].Path,  App.listMusicFiles[i].ContentType, musicProperties.Album, musicProperties.Duration.Ticks, "")); 

} 

Это очень, очень медленно. Но почему?

ответ

1

Вопрос, который вы видите, это, вероятно, из-за этой линии здесь:

await KnownFolders.MusicLibrary.GetFilesAsync(CommonFileQuery.OrderByName); 

Под одеялом он идет через every music file on the entire device, создавая представление в памяти каждого файла, и сортировочных представление обратно процесс вашего приложения.

Лучший способ сделать это - только захватить файлы с фиксированным размером файлов за один раз, используя await KnownFolders.MusicLibrary.GetFilesAsync(CommonFileQuery.OrderByName,index,batchSize);. Это уменьшит количество возвращаемых файлов. Затем вы можете обработать возвращенные файлы в фоновом режиме, запрашивая следующую партию.

+0

Благодарим Адама! Но я думаю, что проблема в петле, чтобы получить информацию о музыке. GetFilesAsync() получить все музыкальные файлы очень быстро! –

+0

Есть ли более быстрый способ получить musicProperties? –

Смежные вопросы