2015-03-11 14 views
5

tôi đang làm việc trên một ứng dụng mà xử lý mảng phao lớn, và tôi đã vô cùng thất vọng khi thấy rằng Swift rõ ràng là một tốt 10x chậm hơn so với Python khi chạy trên iPhone của tôi 5. Tôi đoán rằng không thể đúng, nhưng tôi có thể nghĩ rằng nó đúng là tôi đã không thử nghiệm ứng dụng trong Time Profiler và nhận ra rằng nó có thể không phải là thuật toán của tôi hoặc việc thực hiện Swift gây ra các vấn đề.Ứng dụng Swift chỉ hoạt động hợp lý khi được xây dựng cho Xcode's Time Profiler?

Khi ứng dụng được xây dựng cho profiler, nó hoạt động độc đáo: Nó xử lý trong một khoảng thời gian không đáng kể, như nó cần. Nhưng thông thường, nếu tôi nhấn nút chạy (biểu tượng play) trong Xcode để xây dựng và chạy, ngay cả với trình biên dịch thiết lập để được nhanh nhất, phải mất gần 20 giây để hoàn thành. (Mã số vẫn không thay đổi giữa xây dựng.) Đó là ridiculously chậm.

Đó là lý nhanh khi tôi xây dựng và chạy trong một mô phỏng trên MacBook Pro của tôi, nhưng ngay cả sau đó nó chậm hơn là khi xây dựng và chạy qua Time Profiler trên iPhone nhỏ của tôi 5.

Việc thực hiện sự khác biệt giữa xây dựng cũng có mặt khi tôi đặt mã thử nghiệm sau đây trong ứng dụng) chức năng (trong appdelegate, vì vậy tôi không nghĩ rằng đó là một GUI/vấn đề luồng hoặc bất cứ điều gì. Và cùng một mã kiểm tra chạy nhanh khi được thực hiện trong Objective-C (trong một ứng dụng riêng biệt trên thiết bị của tôi) và Python trên máy Mac của tôi.

var nums: [Float] = [] 

for var i = 0; i < 250000; i++ { 
    nums.append(Float(i) * 0.001) 
} 

(này mất khoảng 20 giây trừ khi chạy qua Time Profiler.)

Có bất kỳ của bạn trải qua bất cứ điều gì giống như trước khi điều này? Tôi sẽ vô cùng hạnh phúc nếu bạn có thể giúp tôi tìm ra điều này.

+1

Liệu nó có tác dụng nếu bạn thay đổi cấu hình build chuẩn bị tung ra? – NobodyNada

+0

Tôi nghĩ rằng nó được thiết lập để phát hành hiện tại. Tôi đã không gây rối với các thiết lập xây dựng nhiều, nhưng có lẽ có một cách để trở lại mặc định chỉ trong trường hợp? – ICoffeeConsumer

+1

Mặc định là Gỡ lỗi, không phải là Bản phát hành. Khi được đặt thành Debug, ứng dụng chậm nhưng dễ gỡ lỗi, khi phát hành thì nhanh nhưng khó gỡ lỗi. – NobodyNada

Trả lời

6

Bạn đang xây dựng ứng dụng trong chế độ Debug thay vì chế độ Release. Chế độ gỡ lỗi dễ dàng hơn nhiều để gỡ lỗi, nhưng chế độ phát hành tạo mã nhanh hơn.


Khi xây dựng cho chế độ Debug, trình biên dịch chèn các biểu tượng debug đặc biệt giúp các trình gỡ lỗi. Tôi đã từng cố gắng gỡ lỗi một ứng dụng trong chế độ Phát hành và trình gỡ rối thậm chí không thể tìm thấy các biến của tôi. chế độ phát hành không chỉ không bao gồm những biểu tượng, nhưng nó cũng sẽ tối ưu hóa ứng dụng của bạn, tạo ra một nhị phân đó là nhiều nhỏ hơn và nhanh hơn.


Dưới đây là làm thế nào để chuyển đổi giữa các chế độ Debug và Release:

  • Bấm vào kế hoạch của bạn ở góc trên cùng bên trái của Xcode.

Click on your scheme in the top-left corner of Xcode.

  • Chọn "Edit Scheme ..."

Select "Edit Scheme..."

  • Bấm vào "Build Configuration" thả xuống.

Click on the "Build Configuration" dropdown.

  • Thay đổi cấu hình build chuẩn bị tung ra.

Do I really need to provide alt text here?

  • Rebuild dự án của bạn.

(tôi không cung cấp hình ảnh ở đây vì tôi giả sử bạn biết làm thế nào để xây dựng lại dự án của bạn.)

+1

Thực sự đánh giá cao nó: Bạn đang "nada" không ai với tôi: p Hoạt động hoàn hảo ngay bây giờ. Tôi chưa bao giờ gặp rắc rối với hiệu suất chế độ gỡ lỗi trước đây, và thực sự không bao giờ nhận thấy sự khác biệt, nhưng nó cực kỳ chậm chạp ở những gì tôi đang cố gắng làm điều đó có vẻ như một lỗi lạ. – ICoffeeConsumer

+0

Thậm chí tệ hơn khi bạn thấy rằng việc sửa lỗi đã không được cải thiện một chút. Nó thậm chí còn lỗi hơn vì nó cuối cùng đã bị rơi ứng dụng ... –

+3

Vâng, tôi ** đã từng nghĩ rằng - cho đến khi tôi bắt đầu lập trình cho vi điều khiển Arduino. Bạn thậm chí không có một trình gỡ rối; bạn phải chớp đèn LED. Và nếu bạn phạm sai lầm có thể gây ra sự cố trên iOS, nó sẽ làm điều gì đó kì quái và bất ngờ trên Arduino. – NobodyNada

Các vấn đề liên quan