我整整一周都在分析我们公司的WCF服务的表现。我的主要任务是比较传输模式:缓冲和流式传输。在某些服务中,我们在端点行为中使用带有消息和protobuf-net的标准合同,而在另一些服务上,我们不使用任何第三方并使用WCF开箱即用。对于我的测试,我使用的是分析器并使用内存分配来分析调用树。我发现使用标准编码器流式传输模式比缓冲更好,在我的情况下2000 Mb对400 Mb每次测试。但是使用protobuf-net我发现流式模式比缓冲模式更糟糕。在这种情况下,两种模式的内存分配是相同的,但流模式下的性能(时间)从每次测试的140秒降至250秒。
由于发生了什么?
UPD: 测试很简单。运行标准WCF服务并使用缓冲(默认)传输模式设置protobuf端点行为,并多次请求包含许多序列化项的结果。您的内存分配将为X,时间为Y.然后在流式传输模式下运行测试。你的内存分配是一样的,但时间是Y * 1,75。 我使用dotTrace时间轴进行分析。