儘可能快地創建Jni的最佳方式是什麼?通過JNI運行時間
我需要調用一個.dll與cxternal測量框進行對話。 Atm我確實使用一個靜態加載的Lib來調用JNI中Box的值。
public class myJni{
static {
System.loadLibrary("myJniDll");
}
public native double Get4(String para);
}
很簡單,你可以看到。
在C面使用:
HINSTANCE hInstLibrary = LoadLibrary("my_64.dll");
typedef void(*FunctionFunc)();
JNIEXPORT jdouble JNICALL my_Get4
(JNIEnv * penv, jclass clazz, jstring Para)
{
typedef double(__stdcall *Get4)(char FAR *lpszPara);
Get4 _Get4;
FunctionFunc _FunctionFunc2;
_Get4 = (Get4)GetProcAddress(hInstLibrary, "my_Get4");
_FunctionFunc2 = (FunctionFunc)GetProcAddress(hInstLibrary, "Function");
const char *nativeString = penv->GetStringUTFChars(Para, 0);
const char* parameter = nativeString;
double ret = _Get4((char*)parameter);
penv->ReleaseStringUTFChars(Para, nativeString);
return ret;
}
代碼需要約20毫秒得到的COM Portunit的價值。價值變化時的滯後並不「感覺」好。當我改變需要時間去超越Jni的價值時是明智的。
有人得到一些tweeks得到它約10毫秒?
@編輯:吉爾指針跳過產生了巨大的影響。它現在不那麼「緩慢」。仍然沒有我想要的,但確定。
Com端口上的Unit是一個以0.000000的精度工作的Measurement設備。所以滯後由最後4個數字顯示並不平穩改變,但在改變時跳過大部分比例。
因此,靜態鏈接會產生更大的影響。你試過了嗎? – EJP 2014-08-29 10:21:12
對不起@ EJP第一次計時器在這裏。不,我不會嘗試到目前爲止,這是下一次我嘗試一旦我回到車站。 – Fulli 2014-08-29 11:10:49
@EJP,我只是用靜態的lib加載運行。它與指針跳過有相同的影響,但是當我同時做這兩件事時,差別是一樣的。非常奇怪...... – Fulli 2014-09-01 07:09:31