Sto lavorando a un'app che elabora array float di grandi dimensioni e sono rimasto estremamente deluso nello scoprire che Swift è apparentemente un buon 10x più lento di Python quando gira sul mio iPhone 5. Suppongo che non possa essere vero, ma io avrei pensato che fosse vero se non avessi testato l'app nel Time Profiler e capito che probabilmente non è il mio algoritmo o l'implementazione di Swift a causare i problemi.L'app Swift funziona solo in modo ragionevole quando è stata creata per il Time Profiler di Xcode?
Quando l'app è creata per il profiler, funziona bene: esegue l'elaborazione in un tempo impercettibilmente piccolo, come dovrebbe. Ma normalmente, se premo il pulsante di esecuzione (simbolo di riproduzione) in Xcode per creare ed eseguire, anche se il compilatore è impostato su Più veloce, sono necessari quasi 20 secondi per essere completato. (Il codice rimane invariato tra le build.) È ridicolmente lento.
E 'abbastanza veloce, quando ho costruire e gestire in un simulatore sul mio MacBook Pro, ma anche poi è più lento di quello che è quando costruito e gestito attraverso il tempo Profiler sul mio piccolo iPhone 5.
Le prestazioni la differenza tra le build è anche presente quando inserisco il seguente codice di test nella funzione application() in AppDelegate, quindi non penso che sia un problema di interfaccia grafica o di threading. E lo stesso codice di test viene eseguito rapidamente quando implementato in Objective-C (in un'app separata sul mio dispositivo) e Python sul mio Mac.
var nums: [Float] = []
for var i = 0; i < 250000; i++ {
nums.append(Float(i) * 0.001)
}
(Questo richiede circa 20 secondi a meno che correre attraverso il tempo Profiler.)
Qualcuno di voi ha provato nulla di simile prima d'ora? Sarei immensamente felice se potessi aiutarmi a capirlo.
funziona se si modifica la configurazione di generazione di rilascio? – NobodyNada
Penso che sia impostato per Rilasciare al momento. Non ho combinato molto con le impostazioni di compilazione, ma forse c'è un modo per ripristinare i valori predefiniti per ogni evenienza? – ICoffeeConsumer
L'impostazione predefinita è Debug, non Release. Quando è impostato su Debug, l'app è lenta ma facile da eseguire il debug, in Release è veloce ma difficile da eseguire il debug. – NobodyNada