2010-04-28 2 views
0

dll 라이브러리를로드하는 jni 응용 프로그램과 함께 작업하고 있지만로드가 너무 오래 걸립니다. DLL이 경로에 있습니다. 관련 informat로,이 dll은 또한 경로에있는 다른 oracle dll에 의존합니다.DLL이 JNI 클래스에서 영원히로드됩니다.

System.loadLibrary("exmaple.dll"); 

로드가 종료되지 않는 이유는 무엇입니까?

+0

오류 메시지가 있습니까? –

+0

로드가 실제로 끝나지 않습니까? – mdma

+0

몇 가지 테스트를했는데 스레드와 관련이있는 것 같습니다. loadLibrary 호출에 중단 점을 넣으면 다음 단계로 넘어 가지 않습니다. 내 응용 프로그램에서 다른 스레드를 다시 활성화하면 다음 단계로 넘어갑니다. 이 자바 버그 또는 일부 스레드 문제가 있는지 나는 알 수 없었다. JDK1.6.0_11을 사용하고 있습니다. – hooray

답변

0

몇 가지 테스트를했는데 스레드와 관련이있는 것 같습니다. loadLibrary 호출에 중단 점을 넣으면 다음 단계로 넘어 가지 않습니다. 내 응용 프로그램에서 다른 스레드를 다시 활성화하면 다음 단계로 넘어갑니다. 이 자바 버그 또는 일부 스레드 문제가 있는지 나는 알 수 없었다. JDK1.6.0_11을 사용하고 있습니다.

누군가 미래에 같은 문제가 발생하는 경우 스레드 문제가 있는지 확인하십시오.

0

먼저 JNI가로드 속도를 늦추는지 또는 DLL이 Windows에서 느리게로드되는지 확인해야 할 수 있습니다.

당신은 당신이 시험 방법은 존재하지 않는 오류가 발생합니다 명령을

rundll32 example.dll,testMethod 

를 사용하여 DLL을로드 테스트 할 수 있습니다,하지만 DLL을로드하고 그것은 종속성을합니다. 시간을 정해서 얼마나 걸리는 지 볼 수 있습니다.

로드가 Rundll32로 느리게로드되는 경우 바이러스 검사기를 끄십시오. 또한 사용 가능한 메모리가 얼마나 있는지 확인하십시오.

JNI가 느려지는 경우 JNA으로 전환 해보세요.

+0

rundll 테스트는 dll을 2 초 정도 빨리로드합니다. – hooray