2010-04-28 83 views
0

我正在加載一個jni應用程序加載一個dll庫,但它的負載花費太長時間。該DLL在路徑中。作爲一個相關的信息,這個DLL依賴於其他也在路徑中的oracle dll。DLL需要永久加載在JNI類

System.loadLibrary("exmaple.dll"); 

你知道爲什麼負載永不結束嗎?

+0

是否有錯誤訊息? – 2010-04-28 21:04:25

+0

負載真的永遠不會結束嗎? – mdma 2010-04-28 22:53:53

+0

我做了一些測試,它似乎與線程有關。當我在loadLibrary調用中放置一個斷點時,它不會進入下一步。在我重新激活我的應用程序中的其他線程之後,它纔會進入下一步。我無法確定這是一個Java錯誤還是某個線程問題。 我正在使用JDK1.6.0_11 – hooray 2010-05-04 14:30:16

回答

0

我做了一些測試,它似乎與線程有關。當我在loadLibrary調用中放置一個斷點時,它不會進入下一步。在我重新激活我的應用程序中的其他線程之後,它纔會進入下一步。我無法確定這是一個Java錯誤還是某個線程問題。我正在使用JDK1.6.0_11。

如果將來有人面對同樣的問題,請檢查線程問題。

0

首先,您可能想要確定它是否是JNI減慢加載速度,或者只是在Windows中加載DLL緩慢。

您可以測試使用命令

rundll32 example.dll,testMethod 

你會拿到測試方法不存在錯誤加載一個dll,但它會加載DLL和它的依賴。你可以計時,看看需要多長時間。

如果用Rundll32緩慢加載,請嘗試關閉病毒檢查程序。還要檢查你有多少空閒的內存。

如果是JNI會降低速度,那麼可以嘗試切換到JNA作爲替代方案。

+0

rundll測試在2秒左右快速加載dll。 – hooray 2010-04-29 20:17:53