为什么Imgur API与网站相比较慢

时间:2012-10-28 21:52:02

标签: c# webclient imgur

public sealed class ImgurUpload
{
    public event EventHandler<UploadCompleteEventArgs> UploadComplete;

    public void PostToImgur(string location, string key, string name = "", string caption = "")
    {
        try
        {
            using (var webClient = new WebClient())
            {
                NameValueCollection values = new NameValueCollection
                {
                    { "image", ConvertToBase64(location) },
                    { "key", key },
                    { "name", name },
                    { "caption", caption}
                };
                webClient.UploadValuesAsync(new Uri("http://api.imgur.com/2/upload.xml"), "POST", values);
                webClient.UploadValuesCompleted += ((sender, eventArgs) =>
                {
                    byte[] response = eventArgs.Result;
                    XDocument result = XDocument.Load(XmlReader.Create(new MemoryStream(response)));
                    if (UploadComplete != null)
                        UploadComplete(this, new UploadCompleteEventArgs(result));
                });
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);  
        }
    }

    private string ConvertToBase64(string imageLocation)
    {
        byte[] imageData = null;
        using (FileStream fileStream = File.OpenRead(imageLocation))
        {
            imageData = new byte[fileStream.Length];
            fileStream.Read(imageData, 0, imageData.Length);
        }
        return Convert.ToBase64String(imageData);
    }
}

public class UploadCompleteEventArgs : EventArgs
{
    public string Original { get; private set; }
    public string ImgurPage { get; private set; }
    public string DeletePage { get; private set; }

    public UploadCompleteEventArgs(XDocument xmlDoc)
    {
        var objLinks = from links in xmlDoc.Descendants("links")
                       select new
                       {
                           original = links.Element("original").Value,
                           imgurPage = links.Element("imgur_page").Value,
                           deletePage = links.Element("delete_page").Value
                       };

        Original = objLinks.FirstOrDefault().original;
        ImgurPage = objLinks.FirstOrDefault().imgurPage;
        DeletePage = objLinks.FirstOrDefault().deletePage;
    }
}

以上是我用Anonymous API上传图片以上传图片的课程。我以前使用过API,并且总是发现它比网站上传器慢得多,并且比使用Web请求直接有效地将数据发送到网站而不是使用API​​的其他.NET应用程序要慢。

我在上面发布了完整的课程,因为它可能是我正在做的(或没做的)导致问题的原因。如果有人能为我确定问题,我真的很感激。

我今天早些时候进行了一些公平的测试,例如一个结果如下:

  • 800kb图片通过imgur 网站 = 35秒
  • 800kb图片,使用我的班级 = 1分钟20秒

1 个答案:

答案 0 :(得分:1)

您上传的那个大约35%,因为您将其作为STRING上传。

通过字节上传,它应该同样快。