我们使用Ractjs 3,JavaScriptEngineSwitcher和Microsoft.ChakraCore开发了我们的代码。
偶尔我的应用程序花了几秒钟加载页面,但我的应用程序日志没有任何错误,所以我决定用Windows服务器上的DebugDiag工具进行诊断。然后我发现了几个与Chakra相关的ThreadAbortException。
System.Threading.ThreadAbortException
线程被中止
System.Threading.WaitHandle.WaitOneNative(System.Runtime.InteropServices.SafeHandle,UInt32,Boolean,Boolean) System.Threading.WaitHandle.InternalWaitOne(System.Runtime.InteropServices.SafeHandle,Int64,Boolean,Boolean) System.Threading.WaitHandle.WaitOne(Int32,Boolean) JavaScriptEngineSwitcher.ChakraCore.ScriptDispatcher.StartThread() System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext,System.Threading.ContextCallback,System.Object,Boolean) System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext,System.Threading.ContextCallback,System.Object,Boolean) System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext,System.Threading.ContextCallback,System.Object) System.Threading.ThreadHelper.ThreadStart()
所有线程的20%都有:。
切入点ChakraCore!JsDisposeRuntime + 12a44
调用堆栈
ntdll!NtWaitForMultipleObjects + 14
KERNELBASE!WaitForMultipleObjectsEx + ef
ChakraCore + bd824
ChakraCore!JsDisposeRuntime + 26ee
ChakraCore!JsDisposeRuntime + 12aa1
kernel32!BaseThreadInitThunk + 14
ntdll!RtlUserThreadStart + 21
另外还有20%的人有:切入点ChakraCore!JsDisposeRuntime + 12a44
调用堆栈
ntdll!NtWaitForMultipleObjects + 14
KERNELBASE!WaitForMultipleObjectsEx + ef
ChakraCore!JsGetPropertyIdFromName + 1673
ChakraCore!JsGetPropertyIdFromName + 1410
ChakraCore!JsGetPropertyIdFromName + 993
ChakraCore!JsDisposeRuntime + 12aa1
kernel32!BaseThreadInitThunk + 14
ntdll!RtlUserThreadStart + 21
答案 0 :(得分:0)
您是否正确添加了对您在本机端处理的JavaScriptValues的引用?如果没有,你将会有内存损坏,其中一个症状会在处理ChakraCore上下文/运行时时崩溃。
有关如何防范此类问题的示例,请参阅React Native Windows' real-world example of how to safely embed ChakraCore(虽然仍有效)。