快速检查远程服务器上是否存在图像的方法
问题描述:
我有一个从CDN加载图像的网站。我需要检查CDN上是否存在100张图像。快速检查远程服务器上是否存在图像的方法
我使用此代码来实现这一目标:
Protected Function RemoteImageExists(ByVal Path As String) As Boolean
Dim httpRequest As HttpWebRequest = CType(WebRequest.Create(Path), HttpWebRequest)
httpRequest.Method = "HEAD"
Try
Dim httpResponse As HttpWebResponse = CType(httpRequest.GetResponse, HttpWebResponse)
Catch ex As Exception
Return False 'Undesirable flow, but seems unavoidable :(
End Try
Return True
End Function
这仍然很慢,而且许多请求暂停。有没有更快的方法来做到这一点?
答
几点建议:
如果CDN可以提供动态内容,托管在CDN服务将提供图像的列表将在性能方面的最佳方法。
图像在同一个目录下吗?如果是,则配置CDN以显示可用文件列表,并查询此列表。解析HTML是一件很丑陋的事情,但由于这些HTML文件的格式有一天不会有意想不到的变化,所以它可以被接受。
如果前两个不可能,请根据具体情况使用
Parallel
扩展名(它可能使事情变得更快或更慢)。异常缓慢。摆脱他们。直接使用套接字可能会有所帮助(即使它很丑陋)。
顺便说一句,找到瓶颈可能有助于找到更好的解决方案。例如,如果瓶颈是处理器能力,并行扩展可能会有所帮助,但是如果是带宽或CDN性能,它只会减慢一切。请注意,瓶颈可能是本地计算机,本地连接,整体连接或CDN。
+0
找到了一个解决方案 - CDN(Rackspace)有一个我可以用来获取文件列表的API。感谢您的建议! – 2010-06-24 19:31:35
我有一个愚蠢的问题:您使用的CDN是否允许为动态内容提供服务? (如果是的话,更快的方法是在CDN上托管服务,返回可用图像列表)。 – 2010-06-24 18:58:15
您需要多久运行一次此检查?何时/何地被称为?你可以检查300/400等级的响应等,以使其更加智能化。 – GalacticCowboy 2010-06-24 19:00:23
我刚刚意识到有些事情是错的 - 设置一个断点表明每个请求都需要几分钟的时间!有些事情严重搞砸了! 我正在通过管理员进行此操作,因此速度并不是一个很大的因素 - 但目前页面的速率可笑地很低,现在似乎是出于某种其他原因。 – 2010-06-24 19:02:49