【发布时间】:2018-03-28 12:26:00
【问题描述】:
我目前有 2 个暴露的端点。第一个是 WebAPI (.NET 4.6)。第二个是 WCF (.NET 3.5)。它们都能够执行相同的计算,但是 WCF 平均慢 10 倍。有问题的计算代码包含在一个 dll 中,我们称之为 core.dll。此 dll 还公开 WCF 端点并由 ASP.NET 站点使用。 webapi dll,我们称之为 api.dll 引用 core.dll 并由 SPA 使用。计算可以由任一客户端触发。平均而言,根据我的测试数据,WCF 服务大约需要 4.5 秒来执行计算,而 WebAPI 大约需要 450 毫秒(或大约快 10 倍)。
我应该注意,所有数据库调用都是在测量的时间范围之外完成的。所有数据都是事先检索的,所有更新都是在计算完成后进行的。
在所有条件相同的情况下,我有什么理由看到纯粹的处理速度有这么大的差异?
我 100% 确定两个客户端的数据相同,并且它们都收到相同的结果。
WEBAPI Controller
Service
GRAB DATA
start timer
Process(DATA) -- the same code/class as below
end timer
UPDATE DATA
Service return
WEBAPI Controller return
WCF Endpoint
Service
GRAB DATA
start timer
Process(DATA) -- the same code/class as above
end timer
UPDATE DATA
Service return
WCF Endpoint return
编辑:为清楚起见添加了图表(希望如此)
编辑 2: 感谢您的答案/ cmets。不幸的是,这个问题看起来不会有任何决定性的结果。我和我的同事最终选择相信这只是框架版本效率的纯粹差异。我们最终对 Web 服务进行了重组,以便只在 WebAPI 中进行计算。
【问题讨论】:
-
好吧,您至少可以包含 ProcessData 代码以及您如何测量时间,只是为了让人们确保您没有遗漏任何东西。另外,由于您提到了不同的 .net 版本,我想它们在不同的机器上运行?
-
流程代码太长,大概有20个文件(大概接近500行)。它们在同一台机器上运行,各个 dll 只是使用不同的 .NET 版本构建的。使用c#
StopWatch测量时间,在调用process(data)之前和之后开始和停止 -
那么我无法想象是什么导致了这种差异。也许它们在具有不同优先级的进程中运行?
-
如果你强制你的 WCF 应用程序运行在更高版本的 .NET 上使用这个:docs.microsoft.com/en-us/dotnet/framework/migration-guide/…?
-
@Evk 这对我们来说不是一个选项,由于对旧框架的依赖,WCF 服务中的某些模块无法在不对应用程序进行重大重构/重写的情况下升级到 3.5 以上。
标签: c# .net wcf asp.net-web-api