如何在应用程序中分析序列化开销

时间:2008-11-02 03:05:42

标签: .net serialization profiling

我的应用程序在前端和数据库之间有一个WCF服务层。由于我们目前在IIS6中托管,因此我们使用SOAP over HTTP。我怎样才能知道我在应用程序中进行序列化活动所花费的实际时间是多少?

4 个答案:

答案 0 :(得分:4)

不是关于衡量 - 而是关于改进:我一直致力于protobuf-net,一种用于.NET的“协议缓冲区”(一种紧凑的,低CPU二进制序列化格式)的实现 - 包括WCF钩子(替换DataContractSerializer)。它有一些pretty good metrics重新序列化。

当与基本的http绑定一起使用时,它也可以与MTOM一起使用,因此您甚至无法获得二进制的base-64开销。有一个WCF样本here

可能有兴趣...

答案 1 :(得分:1)

创建一个消息检查器并将其添加到您的终端行为

在消息检查器中,实现具有以下方法的接口

AfterReceiveRequest
{
  DateTime start = datetime.now;
  return start;
}
BeforeSendReply
{
 // start will be passed in as state in the parameter.  
 TimeSpan period = datetime.now - start 
}

答案 2 :(得分:0)

旧的大型机常常使用的一个简单的事情是在响应中包含“服务器时间”字段。因此,您知道在观察到的时间和服务器时间之间发生的任何事情都是网络/序列化开销。我知道它有点像1960年代,但它仍然运作良好。

如果您想避免更改方法签名,可以在http响应头或其他内容中设置它;)

答案 3 :(得分:0)

如果您可以在客户端上运行Windows Server 2008和Vista,xperf tools是一个不错的选择。这些是基于ETW的,并使用Windows示例配置文件中断来分析系统上运行的任何内容。以下是我自己的xperf工具的series of postsThis post专门用于分析。

请注意,您可以直接为this page下载最新版本的工具。

您可能希望尝试一些其他内核事件,例如磁盘IO和硬故障。