我最近发现这篇文章: http://coderjournal.com/2010/10/timing-the-execution-time-of-your-mvc-actions/
它显示了一个很好的小属性,您可以将其添加到Controller
类中,这会创建一个秒表并在结果中添加X-Runtime
标题。
我一直在尝试添加类似于我的WCF Rest服务的东西,但到目前为止还无法解决这个问题。关于如何在我的网络服务上实现类似内容的任何建议?
答案 0 :(得分:1)
这是aspects的完美之地。查看post sharp。
然后,您可以创建类似的方面:
/// <summary>
/// Adds execution timing and automatic logging to the tagged method
/// </summary>
[Serializable]
public class MethodTimeAttribute : OnMethodBoundaryAspect
{
private String MethodName { get; set; }
private DateTime StartTime { get; set; }
/// <summary>
/// Method executed at build time. Initializes the aspect instance. After the execution
/// of <see cref="CompileTimeInitialize"/>, the aspect is serialized as a managed
/// resource inside the transformed assembly, and deserialized at runtime.
/// </summary>
/// <param name="method">Method to which the current aspect instance
/// has been applied.</param>
/// <param name="aspectInfo">Unused.</param>
public override void CompileTimeInitialize(MethodBase method, AspectInfo aspectInfo)
{
MethodName = method.DeclaringType.FullName "." method.Name;
}
public override void OnEntry(MethodExecutionArgs args)
{
StartTime = DateTime.Now;
}
public override void OnExit(MethodExecutionArgs args)
{
Log.Debug(this, "Method {0} took {1} to execute", MethodName, DateTime.Now - StartTime);
}
}
所有你需要做的就是标记你的方法:
[MethodTime]
private void RunFor(TimeSpan runTime){
// do stuff
}
高级后期功能需要许可证,但方法边界方面的简单功能是免费的。
虽然这不会测试您的wcf服务的任何网络边界,但它会测试您的服务实现时间。
如果您真的想要,您可以创建一些自定义行为并将其注入您的WCF链以测试时间,但在该阶段出现瓶颈的可能性非常小。更有可能的是,您发送的数据很多,所以事情很慢,或者实施中的内容很慢,所有这些都可以独立地在服务器端或客户端进行测试。