我使用的是Windows 2008 R2,CPU是100%。 我在负责的应用程序池上运行了 DebugDiag,并发现了以下调用堆栈:
System.GC._Collect(Int32, Int32)
OpenAccessRuntime.Relational.conn.RelationalConnectionPool.CleanupLeftOvers(System.Object)
System.Threading.ExecutionContext.runTryCode(System.Object)
System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode, CleanupCode, System.Object)
System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
System.Threading.ThreadPoolWorkQueue.Dispatch()
System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()
我的问题是,我想弄清楚是什么组件生成了这个线程,以便我知道这个线程是否来自 Telerik 应用程序,或者它是否由我们的一位开发人员创建的东西控制。
如何确定生成此线程的对象?
此线程由 OpenAccess 运行时生成。
OpenAccess 维护一个连接池,其可配置的"最大活动连接数"值 - 默认值为 10。当所有连接都已发出(并行操作)时,下一个请求将阻塞,直到活动连接返回到池中。如果请求被阻止,后台池管理线程会尝试强制实施垃圾回收,以释放可能存在的任何悬空/无效连接。
是否已明确指定最大活动值?也许您应该根据您的使用情况考虑更高的值。你有没有访问"上下文"的地方。连接',不处理它?