我们正在使用ASP.Net Web服务。
架构是 基于桌面的应用程序在.Net 3.5中开发 - 客户端应用程序(客户机) .Net 3.5中基于ASP.Net的Web服务 - 业务逻辑层(服务器上的IIS) SQL 2005数据库 - 数据库层(相同或不同的服务器,然后是IIS)
该应用程序几乎已经开发出来,并且正在进行首次实施。 在第1天,我们遇到了一个停止问题。 我们已经加载了30000条记录的患者数据库,患者搜索屏幕的响应时间超过20秒。 我们已将数据库编入索引并删除了所有不必要的调用 一个。从客户端到Web服务 湾从Web服务到数据库。 响应时间仍为7秒,这是不可接受的,必须在3秒内完成。 我们看到的主要问题是4秒被视为Web服务通过网络将这种大小的数据返回给客户端的一部分。
这是什么解决方案?
答案 0 :(得分:2)
如果您的搜索查询返回大型结果集,则可以考虑向Web服务调用添加分页功能。
用户似乎不太可能一眼就能检查250(或任意数量> 10)的患者。因此,不是一个返回所有250的方法,而是可以以10个为单位返回它们。您必须稍微更改Web方法的签名。
这会减少网络负载。
您可以在服务器上缓存搜索结果,以避免经常运行昂贵的查询。
这可能是解决方案的一部分,但可能还有很多其他选择!
祝你好运!答案 1 :(得分:1)
确保您的查询可以使用索引。在SQL Server中索引表的最简单方法是使用Sql Server Tuning Wizard。 诊断问题的另一种方法是在服务上添加Ping方法。这将使您能够检查网络延迟。 您还可以使用Cache对象缓存常见记录。 对于整个海洋来说,sql server的30000行不到一滴水:)
答案 2 :(得分:1)
确保您只返回对客户端实际有用的数据。 Web服务太容易返回大型数据集,就像它们在数据库中一样。如果速度确实是一个高优先级,那么你应该尽可能多地将返回给客户机的信息量减少到你正在采取的任何行动所必需的信息量。
您可以设置一些通过Web服务传递的代理/ datacontract对象,这些对象仅包含特定于正在进行的Web服务调用的信息。一个简单的例子就是只返回一个人的姓名,而不是返回他们的姓名,地址,电话号码等。
答案 3 :(得分:0)
如果您的问题确实是通过网络发送的数据量。除了减少数据量之外,您没有其他选择。正如Scotty在他改变物理定律之前所说的那样“Capin,我可以改变音乐的规律”;)
通过z速度数据链路传输y字节数据需要x个时间。
如何减少数据在很大程度上取决于您的情况。您可以使用压缩,根据数据的构成,可能会或可能不会获得任何东西,但基于XML,您应该从中获得相当好的改进。
您也可以一次传输较少数量的记录,或者仅在需要时使用延迟加载来加载数据子集。
当然,如果您在只需要3个字段时转移整个表格,那么这也会大大增加数据的大小。确保您只传输所需的数据。