c# - 最小化服务请求

标签 c# algorithm wcf

我得到了一个 WCF 服务,我可以通过契约(Contract)方法从一个点到另一个点(纬度和经度)以米为单位获取距离:

public double GetDistance(double originLat, double originLng, double destLat, double destLng)

其中一个点是常量点,另一个点是我需要根据收到的一些其他信息从数据库中提取的几个位置之一。最终目标是获得距离该常数点最近的 5 个位置。

想象一下,如果使用 WCF 服务每个请求都要花钱......使用最直接的方法,我需要从数据库中获取所有位置,然后需要从服务中为每个位置发出请求......是否有以某种方式使其变得更好的方法,例如以某种方式过滤数据库中的位置以减少对服务的请求?

最佳答案

此方法只是一个数学函数,因此无需将其托管在 WCF 服务中。无论调用此服务的是什么,都应该只拥有此方法的自己的本地版本。这将通过消除服务请求来最大限度地减少服务请求,而且速度会快得惊人。

从其他详细信息来看,您似乎也在执行一个返回多个点的查询,并且您想从这些点中找到最接近给定位置的五个点。

缓存仅在您以一定频率发出相同请求时才有用。返回点集合的第一个查询可能会重复,因此缓存给定查询的点集合可能有一定意义。

但是除非您与这些点进行比较的位置也经常重复,否则添加它会弄乱您的缓存。

例如,这可能受益于缓存...

Points[] GetPointsUsingSomeQuery(queryInput)

...如果 queryInput 一遍又一遍地重复。

但是如果你把它改成这样...

Points[] GetPointsClosestToSomeLocation(queryInput, Point location)

...如果 location 不经常重复,那么缓存的任何好处都会消失。您只会缓存一堆数据并且永远不会使用它们,因为您永远不会两次发出完全相同的请求。

这也是缓存可能对您的原始功能没有帮助的原因。除非您打算一遍又一遍地重复精确组合,否则您永远不会在缓存中找到您要查找的结果。即使它偶尔重复,也可能不值得。您仍然会发出大量请求,并且还会在缓存中存储大量未使用的数据。

最好的办法是克服任何限制,说明您不能在本地执行此数学函数。

关于c# - 最小化服务请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56220951/

相关文章:

.net - WCF - 客户端代理配置与服务 web.config 不匹配

c# - 类似于 Mathf.Clamp 函数的东西?

c# - 通过字符串生成EF orderby表达式

vb.net - 星号兼容性查找算法

c - 如何更快地检查正则表达式列表

wcf - 如何处理 WCF 中不正确的 SOAP 错误?

c# - 按降序对数组进行排序的更好方法

c# - ASP.NET 是否在转发器中选中了复选框?

algorithm - “cracking the coding interview(fifth edition)” : 9. 10盒堆叠

wcf - 如何确保 WCF ChannelFactory 使用 xml 配置中的 Binding 设置(忽略 MaxArrayLength)