reactjs.net线程被中止

时间:2017-06-20 08:51:16

标签: c# reactjs iis-10 reactjs.net chakracore

我们使用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

1 个答案:

答案 0 :(得分:0)

您是否正确添加了对您在本机端处理的JavaScriptValues的引用?如果没有,你将会有内存损坏,其中一个症状会在处理ChakraCore上下文/运行时时崩溃。

有关如何防范此类问题的示例,请参阅React Native Windows' real-world example of how to safely embed ChakraCore(虽然仍有效)。