Rallentamento esponenziale di Applescript

2

Quindi ho lavorato su un semplice AppleScript per cercare di aiutare a gestire la mia posta elettronica in Mail di OS X e, a quanto pare, funziona perfettamente con uno dei problemi principali; la performance della sceneggiatura è orribile.

Ora, so che AppleScript non è sempre il linguaggio di scripting più veloce, ma non sono sicuro del perché le prestazioni siano così negative. Ancora più strano, il tempo necessario per completare ogni operazione in un ciclo sembra aumentare nel tempo! Ad esempio, il mio script deve corrispondere a circa 300 e-mail (elaborate da un elenco di circa 500), dopo cinque minuti corrisponderà a circa 100 e-mail, ma dopo le venti sarà pari solo a circa 125, dopo aver rallentato fino a indica che ci vuole quasi un minuto per elaborare ogni e-mail e continua a peggiorare fino a quando la sceneggiatura non termina dopo circa tre ore.

Ecco una versione semplificata dello script:

set ignoreTheseMailboxes to { "Inbox", "Drafts", "Junk", "Sent", "Trash" }
set expiryDate to (current date) - (45 * days) as date

set myLogFile to open for access POSIX file "/Users/username/Desktop/test.log" with write permission

tell application "Mail"
    set theAccounts to every account
    repeat with eachAccount in theAccounts
        set theMailboxes to mailboxes in eachAccount
        write name of eachAccount & return to myLogFile

        repeat with eachMailbox in theMailboxes
            if (ignoreTheseMailboxes does not contain (name of eachMailbox) then
                write " " & name of eachMailbox & return to myLogFile

                set theMessages to messages in eachMailbox
                repeat with eachMessage in theMessages
                    if date received of eachMessage <= expiryDate then
                        write "     " & subject of eachMessage & return to myLogFile
                    end if
                end repeat
            end if
        end repeat
    end repeat
end tell

close myLogFile

Dovrai perdonare qualsiasi refuso da parte mia dimagrendo, ma quanto sopra è il comportamento di base dello script e presenta lo stesso problema quando viene eseguito attraverso gli stessi account e messaggi di posta elettronica.

Quello che mi piacerebbe sapere è, qual è la ragione per cui uno script come questo subirà rallentamenti crescenti, e c'è un modo per ottimizzarlo per evitare questo tipo di problemi?

È solo un peccato che non possiamo vedere le cartelle intelligenti in Mail, in quanto potrebbe ridurre in modo significativo il numero di messaggi che devono essere cercati (ed evitare la necessità di testarli).

[modifica] Inoltre, dovrei notare che durante l'operazione il processo che esegue lo script si insinuerà rapidamente al 100% di utilizzo della CPU, quindi AppleScript sta sicuramente facendo qualcosa , non riesco a capire cosa!

    
posta Haravikk 14.07.2014 - 19:13
fonte

1 risposta

1

Sembra che il problema non sia con AppleScript, ma con Script Editor, dopo averlo confermato con un avanti e indietro con un ingegnere Apple. Non sono ancora convinto del perché questo dovrebbe essere il caso, ma lo script funziona molto meglio quando viene eseguito tramite osascript , specialmente dopo averlo refactoring per usare un'istruzione whose durante il recupero dei messaggi, piuttosto che iterare su di essi con un condizione if .

    
risposta data 02.08.2014 - 18:15
fonte

Leggi altre domande sui tag