C# 负载测试下的DbContext/Ninject依赖项GetService Slow SingleOrDefault
由于我一直在收集诊断信息,但似乎不能完全指出问题所在,因此我对这篇冗长的帖子提前表示歉意 EF6/WebAPI 2 首先,我注意到一个运行缓慢的端点,在负载测试中情况变得更糟 代码: 有趣的是,随后的电话显示,“加速”的时间已经过去了C# 负载测试下的DbContext/Ninject依赖项GetService Slow SingleOrDefault,c#,entity-framework,ninject,C#,Entity Framework,Ninject,由于我一直在收集诊断信息,但似乎不能完全指出问题所在,因此我对这篇冗长的帖子提前表示歉意 EF6/WebAPI 2 首先,我注意到一个运行缓慢的端点,在负载测试中情况变得更糟 代码: 有趣的是,随后的电话显示,“加速”的时间已经过去了 因此,这将是一个打开和关闭的情况,除了在负载测试下,端点显示每个调用的延迟4秒。(例如,同时运行250次的测试将显示每个测试需要4秒以上的时间。) 手写负载测试代码: public override IEnumerator<WebTestRequest&g
因此,这将是一个打开和关闭的情况,除了在负载测试下,端点显示每个调用的延迟4秒。(例如,同时运行250次的测试将显示每个测试需要4秒以上的时间。) 手写负载测试代码:
public override IEnumerator<WebTestRequest> GetRequestEnumerator()
{
WebTestRequest request6 = new WebTestRequest("http://localhost:57874/api/acts/10553697");
request6.Timeout = 120;
request6.Method = "GET";
request6.Headers.Add(new WebTestRequestHeader("Authorization", "Bearer h0aHdT6..."));
request6.Headers.Add(new WebTestRequestHeader("Accept","application/..."));
request6.Headers.Add(new WebTestRequestHeader("ContentType", "application/json"));
request6.ValidateResponse += new EventHandler<ValidationEventArgs>(request6_ValidateResponse);
yield return request6;
request6 = null;
}
public覆盖IEnumerator GetRequestEnumerator()
{
WebTestRequest6=新的WebTestRequest(“http://localhost:57874/api/acts/10553697");
请求6.超时=120;
request6.Method=“GET”;
添加(新的WebTestRequestHeader(“授权”、“承载h0aHdT6…”));
添加(新的WebTestRequestHeader(“接受”、“应用程序/…”);
添加(新的WebTestRequestHeader(“ContentType”,“application/json”);
request6.ValidateResponse+=新事件处理程序(request6\u ValidateResponse);
收益回报请求6;
request6=null;
}
所以
我确实遇到了这个问题,作为一个PluralSight迷,我能够立即进入课程。然而,这是一个七小时的课程,最后我不确定是EF造成了延误。很抱歉有人跟了上来。我想出来了,但忘了在这里更新 所以你可以说问题出在Ninject上……但你也可以提出一个强有力的理由,那就是我们的设计,这就是问题所在 最后我要说的是,问题出在我们的设计上。一点小小的灵活性可能会阻止设计成为一个问题,但如果一个糟糕的设计从未出现,它仍然是糟糕的设计吗 无论如何,我们的端点在执行操作时是灵活的。这很好,除了加上Ninject,即使不需要,所有的东西都被构造出来了 例如,一个端点可能有13个注入对象,但对于给定的操作,只需要3个。(其他10个将由其他消费者使用) 不管只需要3个,Ninject将实例化所有13个,并在10分钟750恒定负载下…这是一个非常紧张的过程 因此,为了更具体的目的,出现了几个端点,jit时间急剧下降 根据我们上面的例子: 一个端点上的13个注入对象变为:
COREIOC_Enter GetService Timein: 7:15:56 AM:
COREIOC_Complete CreateRequest Elapsed: 00:00:00.0008914
COREIOC_Resolve Elapsed: 00:00:00.0032197
COREIOC_SingleDef Resolve Elapsed: 00:00:04.4787988
COREIOC_Exit Elapsed: 00:00:04.4803695
COREIOC_Enter GetService Timein: 7:27:08 AM:
COREIOC_Complete CreateRequest Elapsed: 00:00:00.0000266
COREIOC_Resolve Elapsed: 00:00:00.0018957
COREIOC_SingleDef Resolve Elapsed: 00:00:00.0307401
COREIOC_Exit Elapsed: 00:00:00.0354408
public override IEnumerator<WebTestRequest> GetRequestEnumerator()
{
WebTestRequest request6 = new WebTestRequest("http://localhost:57874/api/acts/10553697");
request6.Timeout = 120;
request6.Method = "GET";
request6.Headers.Add(new WebTestRequestHeader("Authorization", "Bearer h0aHdT6..."));
request6.Headers.Add(new WebTestRequestHeader("Accept","application/..."));
request6.Headers.Add(new WebTestRequestHeader("ContentType", "application/json"));
request6.ValidateResponse += new EventHandler<ValidationEventArgs>(request6_ValidateResponse);
yield return request6;
request6 = null;
}