2010-10-25 27 views
1

大家好 我遇到了我的JNI庫問題。 相同代碼的執行時間從一部手機變爲另一部手機。 我以爲那只是因爲我們在測試的舊手機上,但最近我上的HTC Legend運行,所有的JNI代碼很慢...Android:從一部手機到另一部手機的本機/ JNI代碼性能變化

我運行分析器和一個真正的白天和黑夜的區別: 上有些手機的jni功能需要15%至20%,因爲在其他手機上,需要40%和50%的相同條件...

任何人都有解釋?

+1

如果您提供了更多信息 - 您的JNI代碼的功能,設備的功能以及這些設備上的時間安排 - 我可能會根據您的具體情況猜測。 – Will 2010-10-25 09:06:26

+0

特別是,「JNI代碼」是指「進行大量JNI調用的代碼」,還是「本地代碼」。 – fadden 2010-10-26 00:04:30

+0

oki要更具體一些,我使用我包裝的花栗鼠物理引擎使它可以與android一起使用。所以所有的物理部分都在C中完成,並且結果被髮回到Java。 – 2010-10-26 03:25:39

回答

1

如果其中一部手機使用Foryo(2.2)中添加的JIT(Just In Time)編譯器,那麼應​​該比舊版本更快。你使用相同的Android版本測試它嗎?

除此之外 一些設備在浮點運算上比其他設備更好。沒有實現FPU的設備將會進行emulutae漂浮點操作。在這裏你可以找到一個很好的博客文章:http://www.badlogicgames.com/wordpress/?p=71

有關於如何使用定點算術實現浮點系統來源普蘭蒂:http://en.wikipedia.org/wiki/Fixed-point_arithmetic

+0

JIT不適用於JNI – Will 2010-10-25 09:01:42

+0

確實如此,所以只是不考慮第一部分:D – Moss 2010-10-25 09:06:18

+0

這實際上似乎是我一直存在的問題。因爲我沒有編寫我正在使用的C代碼,所以我的功能非常有限,但已經通過從雙打切換到花車,我設法提高了速度。謝謝 – 2010-10-26 03:26:11

1

處理器當然不一樣的;他們有不同的feed,速度,緩存等等。明顯的解釋是,的處理器。

此外,系統範圍內的事情可能會影響處理 - 如果您是使用JNI處理由相機拍攝的圖像,則圖像的大小可能是設備特定的。

此外,你必須檢查你測量線程時間和掛鐘時間;如果查看時間相對於與Java代碼的相關部分,您可能會看到Java中的相對加速(例如Android 2.2中的JIT),而不是JNI中的減速。