2014-02-18 7 views
0

Я написал сценарий, который будет идентифицировать дубликаты в iTunes, найти их экземпляры в плейлистах и ​​другие вещи, которые, как я считаю, не актуальны. Для того, чтобы проверить, если трек является дубликатом, у меня есть следующий код:Любой способ улучшить производительность этого кода Apple Appunes?

 set duplicateSongs to ¬ 
     get (every track of playlist 1 where ¬ 
      (name is equal to (name of currentTrackToCheck as text) and ¬ 
       database ID is not equal to (database ID of currentTrackToCheck as integer) and ¬ 
       time is equal to (time of currentTrackToCheck as text))) 

я написал и проверил это на тестовую библиотеку с 1000 песнями, и это было быстро. Когда я протестировал его против своей медиатеки iTunes, которая составляет около 30 000 песен, все ад провалился.

Этот фрагмент кода занимает 2 минуты, чтобы завершить обработку! Есть ли способ сделать это быстрее по коду? Я много читал в AppleScript, и я верю, что с помощью where/who это самый быстрый способ отфильтровать результаты запроса.

Спасибо! :-)

ответ

0

Просто изменен с помощью функции поиска, а затем делать поиск в том, что и она занимает меньше второй - yay! :-)

on SearchForDuplicates(currentTrackToCheck, iTunesLibrary) 
tell application "iTunes" 
    set duplicateSongs to {} 
    set preSearch to search iTunesLibrary for (name of currentTrackToCheck as text) only songs 
    repeat with aTrack in preSearch 
     tell aTrack 
      if (name is equal to (name of currentTrackToCheck as text) and ¬ 
       database ID is not equal to (database ID of currentTrackToCheck as integer) and ¬ 
       time is equal to (time of currentTrackToCheck as text)) then 
       set end of duplicateSongs to aTrack 
      end if 
     end tell 
    end repeat 
    return duplicateSongs 
end tell 

конец SearchForDuplicates

0

Это не влияет на скорость, но я бы написать это ...

tell application "iTunes" 
    set {trackName, trackDatabaseID, trackTime} to {name, database ID, time} of current track 
    set duplicateSongs to (get every track of playlist 1 whose name = trackName and time = trackTime and database ID ≠ trackDatabaseID) 
end tell 
+0

Независимо от скорости, что вы написали намного более разборчивыми, чем у меня. Я изменю код и заметлю об этом - спасибо за ответ! :-) – csaborio

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