2010-04-28 84 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