我在IIS中托管了WCF服务。 iisreset之后,当我发送第一个请求时,该服务需要4-5分钟才能返回响应。不幸的是,这个启动时间(即使是一次)对我来说还是不可接受的。大部分时间都在ServiceHost构造函数中。 我尝试使用YourKit分析实际的方法,这需要花费一些时间。事实证明,某些内部CLR方法需要时间。我已经覆盖了ServiceHostFactory并有一些自定义代码,在调用ServiceHost构造函数之后,我将这些代码称为。
我已经附加了YourKit的输出。第一列是方法名称,其后是花费的时间。
System.ServiceModel.ServiceHost..ctor(Type, Uri[]) 143125 14
System.ServiceModel.ServiceHostBase.InitializeDescription(UriSchemeKeyedCollection) 143078 15
System.ServiceModel.ServiceHost.CreateDescription(IDictionary<String,System.ServiceModel.Description.ContractDescription>&) 143062 16
System.ServiceModel.Description.ContractDescription.GetContract(Type, Type) 143000 17
System.ServiceModel.Description.TypeLoader.LoadContractDescriptionHelper(Type, Type, Object) 143000 18
System.ServiceModel.Description.TypeLoader.AddBehaviors(ContractDescription, Type, Boolean, TypeLoader/ContractReflectionInfo) 142546 19
System.ServiceModel.Description.TypeLoader.ApplyServiceInheritance<IBehavior,TBehaviorCollection>(Type, TBehaviorCollection, TypeLoader/ServiceInheritanceCallback<IBehavior,TBehaviorCollection>) 142531 20
System.ServiceModel.Description.TypeLoader.AddBehaviorsAtOneScope<IBehavior,TBehaviorCollection>(Type, TBehaviorCollection, TypeLoader/ServiceInheritanceCallback<IBehavior,TBehaviorCollection>) 142531 21
System.ServiceModel.Description.TypeLoader/c__DisplayClass23_0.<AddBehaviors>b__0(Type, KeyedByTypeCollection<System.ServiceModel.Description.IOperationBehavior>) 142531 22
System.ServiceModel.Description.TypeLoader.GetIOperationBehaviorAttributesFromType(OperationDescription, Type, Type) 142515 23
System.RuntimeType.GetInterfaceMap(Type) 142296 24
System.RuntimeType.GetMethodBase(RuntimeType, RuntimeMethodHandleInternal) 97375 25
System.RuntimeType/RuntimeTypeCache/MemberInfoCache.AddMethod(RuntimeType, RuntimeMethodHandleInternal, RuntimeType/RuntimeTypeCache/CacheType) 95921 26
System.RuntimeType/RuntimeTypeCache/MemberInfoCache.Insert(T[]&, String, RuntimeType/MemberListType) 93812 27
System.RuntimeType/RuntimeTypeCache/MemberInfoCache.MergeWithGlobalList(T[]) 77625 28
System.Reflection.RuntimeMethodInfo.CacheEquals(Object) 7734 29
这里要花些时间吗?我可以做些什么来改善这一点?