快速检查远程服务器上是否存在图像的方法

快速检查远程服务器上是否存在图像的方法

问题描述:

我有一个从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 

这仍然很慢,而且许多请求暂停。有没有更快的方法来做到这一点?

+0

我有一个愚蠢的问题:您使用的CDN是否允许为动态内容提供服务? (如果是的话,更快的方法是在CDN上托管服务,返回可用图像列表)。 – 2010-06-24 18:58:15

+0

您需要多久运行一次此检查?何时/何地被称为?你可以检查300/400等级的响应等,以使其更加智能化。 – GalacticCowboy 2010-06-24 19:00:23

+0

我刚刚意识到有些事情是错的 - 设置一个断点表明每个请求都需要几分钟的时间!有些事情严重搞砸了! 我正在通过管理员进行此操作,因此速度并不是一个很大的因素 - 但目前页面的速率可笑地很低,现在似乎是出于某种其他原因。 – 2010-06-24 19:02:49

几点建议:

  1. 如果CDN可以提供动态内容,托管在CDN服务将提供图像的列表将在性能方面的最佳方法。

  2. 图像在同一个目录下吗?如果是,则配置CDN以显示可用文件列表,并查询此列表。解析HTML是一件很丑陋的事情,但由于这些HTML文件的格式有一天不会有意想不到的变化,所以它可以被接受。

  3. 如果前两个不可能,请根据具体情况使用Parallel扩展名(它可能使事情变得更快或更慢)。

  4. 异常缓慢。摆脱他们。直接使用套接字可能会有所帮助(即使它很丑陋)。

顺便说一句,找到瓶颈可能有助于找到更好的解决方案。例如,如果瓶颈是处理器能力,并行扩展可能会有所帮助,但是如果是带宽或CDN性能,它只会减慢一切。请注意,瓶颈可能是本地计算机,本地连接,整体连接或CDN。

+0

找到了一个解决方案 - CDN(Rackspace)有一个我可以用来获取文件列表的API。感谢您的建议! – 2010-06-24 19:31:35