我试图弄清楚为什么客户端应用程序启动后第一次WCF调用与第二次调用相比需要更多时间.
我做了什么测试:
basicHttpBinding
为了减少网络和安全开销.在我的测试中,我看到第一次呼叫约700毫秒,第二次呼叫约3毫秒.
几乎一秒似乎是JIT编译器的太多时间.我会接受,如果那个时间用于初始化一些复杂的基础设施,如ObjectContext
实体框架,但我的代码非常简单,代理类已经编译.
我也试过netNamedPipeBinding
绑定.结果证明模式 - 第一次调用需要~800 ms,第二次调用需要~8 ms.
如果有人能解释为什么第一次服务电话会花费这么多时间,我们将不胜感激.
在Win 7 64位中测试过.
我的实现如下.
合同:
[ServiceContract]
public interface ICounter
{
[OperationContract]
int Add(int num);
}
Run Code Online (Sandbox Code Playgroud)
服务实施:
public class CounterService: ICounter
{
private int _value = 0;
public int Add(int num)
{
_value += num;
Console.WriteLine("Method Add called with argument {0}. Method returned {1}", num, _value);
return _value;
}
}
Run Code Online (Sandbox Code Playgroud)
服务器实施:
class Program
{
static void Main(string[] …
Run Code Online (Sandbox Code Playgroud) 我开始与标准Sitecore.Kernel
和Sitecore.Nexus
.Sitecore在这里提供了非常具有描述性的错误消息,所以我也添加DependencyInjection
了.它带来了很多依赖项,并且它们没有显示在config belo中.如您所见,我使用*.NoReferences
Sitecore软件包的版本来控制依赖项.
<packages>
<package id="Microsoft.Extensions.DependencyInjection" version="1.0.0" targetFramework="net452" />
<package id="Sitecore.FakeDb" version="1.2.2" targetFramework="net452" />
<package id="Sitecore.Kernel.NoReferences" version="8.2.160729" targetFramework="net452" developmentDependency="true" />
<package id="Sitecore.Nexus.NoReferences" version="8.2.160729" targetFramework="net452" developmentDependency="true" />
</packages>
Run Code Online (Sandbox Code Playgroud)
之后我卡住了.我收到的错误没有提供错过的内容:
System.NullReferenceException : Object reference not set to an instance of an object.
at Sitecore.Configuration.DefaultFactory.CreateType(XmlNode configNode, String[] parameters, Boolean assert)
at Sitecore.Configuration.DefaultFactory.CreateFromTypeName(XmlNode configNode, String[] parameters, Boolean assert)
at Sitecore.Configuration.DefaultFactory.CreateObject(XmlNode configNode, String[] parameters, Boolean assert, IFactoryHelper helper)
at Sitecore.Configuration.DefaultFactory.CreateObject(XmlNode configNode, String[] parameters, Boolean assert)
at Sitecore.Configuration.DefaultFactory.CreateObject(String configPath, …
Run Code Online (Sandbox Code Playgroud)