我正在对使用 EF(System.Data.Entities)
从 SQL DB 读取的 WCF 服务进行一些分析。当我启动多个访问服务的并行客户端时,CPU 都达到 100%,性能普遍下降,一切都陷入困境。
在使用并发分析器对此进行分析时,我发现 85% 的时间花在同步上,只有大约 4% 是实际代码执行。深入查看堆栈跟踪,大部分同步似乎来自对WaitForSingleObject
in的调用System.Data.SqlClient.TdsParserStateObject.ReadSniSyncOverAsync
。堆栈显示调用转到本机方法包装器,然后在kernel32.dll!_WaitForSingleObject
.
有谁之前经历过这个吗?有什么办法可以解决这个问题吗?我并没有真正为此投入荒谬的负载,只有大约 20 个并行客户端,而且都是只读的,所以我很惊讶线程甚至会费心进行同步。
我已经为此奋斗了一个星期,我无法解释。任何帮助,将不胜感激!