.NET Web服务性能不佳(使用MVC3考虑切换到WCF)

时间:2011-06-05 02:49:37

标签: javascript asp.net wcf web-services asp.net-mvc-3

我正在构建一个基于.NET的Web服务,我在其中传递一个字符串作为URL的一部分,然后我返回另一个字符串。返回的字符串实际上是JavaScript。

目前,我正在使用MVC3进行此项服务,因为要求似乎非常简单,我没有看到任何理由将WCF纳入其中。 - 特别是因为我刚刚返回JS,并且不需要用XML或任何东西包装任何数据。

在初始负载测试期间,服务的性能似乎是不可接受的(吞吐量约为85 /秒)。由于我正在构建JavaScript,并且返回它,我决定看看如果我只是返回一些硬编码的JS会有什么性能。这使我的性能翻了一番(吞吐量约为175 /秒)。什么都没有惊天动地,但速度快了两倍。我期待这一点。

然后,为了好玩,我决定看看从IIS中提取实际预生成的JS文件来加载测试的速度有多快。这引起了我的注意。它快了约30倍(吞吐量为2,200 /秒)!我希望拉平文件比生成JS然后返回它要快得多,但这要快得多,我想知道MVC3是否很慢,或者服务器是否有问题。

如果我切换到WCF,我会看到显着的吞吐量增加吗? WCF甚至会让我返回一串JS(还是希望everythigng包含在XML中)?如果我需要非常快的响应时间,我应该使用除WCF或MVC3之外的东西吗?

由于

正如我之前所说,

4 个答案:

答案 0 :(得分:1)

如果生成的JavaScript仅依赖于少数变量且通常相同,则可以在action方法上使用OutputCache属性。 VaryByParam属性允许您为不同的变量值提供多个缓存副本。

答案 1 :(得分:0)

从iis中提取文件是一种完全不同的操作,并且由于服务器文件缓存而无需处理,因此可以获得极大的性能提升。我不认为你的wcf会有所不同(是的,你可以返回JavaScript),但这将是一个简单的性能测试。

答案 2 :(得分:0)

是否可以在客户端缓存预生成的JS文件,因此性能提升了很多?

答案 3 :(得分:0)

您正在抱怨性能但是您没有展示如何测试性能以及如何构建JSON对象。对于性能测试,请注意ASP.NET(WebForms和MVC)在启用会话状态时已同步处理。这意味着当时只能处理来自给定用户会话的一个请求以确保会话状态一致性。如果控制器turn off the session state,请检查性能是否会提高。

通常WCF不会增加吞吐量。它可能甚至更复杂的处理,如果你想用它来服务JSON,你最有可能最终允许AspNetCompatibility,而{{1}}将使用你目前使用的相同处理管道+一些额外的WCF东西

另请注意,静态文件已缓存。