2012-03-01 27 views
8

Flash được biết là hành xử theo những cách rất khó đoán khi nói đến thao tác dữ liệu. Tôi tò mò rằng nếu có bất kỳ lợi ích hiệu suất/bộ nhớ để sử dụng số thay vì ints sang một bên từ các giá trị cần độ chính xác. Tôi đã nghe nói rằng một số thao tác cơ bản trong Flash có thể chuyển đổi nhiều lần giữa hai loại để giải quyết biểu thức. Tôi cũng đã nghe nói rằng thời gian chạy Flash, dưới mui xe, thực sự bản đồ ints để không chính xác Số/Floats trong thời gian chạy. Có bất kỳ điều này đúng không?Ints có luôn nhanh hơn Số/Nổi trong AS3 không?

Trả lời

14

Thời gian chạy Flash thực sự là một nơi tối.

  • Như bạn đã đề cập AVM2 does convert big ints into Number.
  • Số nguyên là số thực int.
  • And there's more stuff about ints.
  • Các gợi ý được sử dụng chậm trong vòng lặp BUT NOW THEY ARE NOT (kết quả trong bài viết dường như là sự kết hợp giữa tạo mã byte lạ và tối ưu hóa JIT).
  • Số mất nhiều không gian hơn trong bộ nhớ nhưng đây là nothing so với ngay cả một tệp JPEG duy nhất.
  • Về mặt logic, cảm thấy tốt hơn khi sử dụng uints trong các vòng lặp.
  • Số là dấu phẩy động, bạn phải cẩn thận so sánh chúng.

Jackson Dunstan thực hiện kiểm tra khá tốt về hiệu suất cấu trúc ngôn ngữ AS3 khác nhau. Tất nhiên nó luôn luôn tốt để kiểm tra kết quả cho mình. Từ loạt bài về hiệu suất 10.2 bạn có thể thấy rằng với mọi phiên bản Flash Player mới, chúng tối ưu hóa thứ gì đó nhưng những thứ khác có thể chậm hơn: 123.

P.S. Câu trả lời này có thể già đi rất sớm và cũng có thể được trích dẫn trong một vài năm sau đó tất nhiên sẽ sai.

0

Bạn không nhận được bất kỳ lợi ích nào về hiệu suất thực tế thực sự với số int. Vì vậy, nếu bạn không sử dụng một biến cho các công cụ như chỉ số vòng lặp hoặc những thứ yêu cầu gia số chính xác, Số là tốt. Trong thực tế, một số có thể là NaN nếu bạn nhận được một kết quả không hợp lệ, đó là một lợi ích tốt đẹp.

+0

Vâng, bạn * làm * nhận được lợi ích bộ nhớ, mặc dù - một int sử dụng 32 bit, một số sử dụng 64 bit. – weltraumpirat

+0

Ngoài ra, từ nguồn được liên kết của riêng bạn, đây là thông tin trả lời của senoculars: "' + -/*% 'là tất cả các phép toán Số. Nếu được sử dụng trên int/uint, chúng sẽ được chuyển thành Số bởi trình phát Flash trong nền và recast trở lại int/uint sau khi hoạt động hoàn tất '| &^>><< > >>' (bitwize) giữ lại các kiểu int/uint trong trình phát và được tối ưu hóa cho chúng cho các loại đó. " – weltraumpirat

+0

weltraumpirat, bạn sẽ phải sử dụng rất nhiều biến cho sự khác biệt hai byte giữa int và số là một vấn đề, nhưng bạn tất nhiên là chính xác. :) – Almo

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