.NET/C#HttpClient-在Mono中的使用

.NET/C#HttpClient-在Mono中的使用,c#,performance,asynchronous,mono,httpclient,C#,Performance,Asynchronous,Mono,Httpclient,我目前正在做一个大量使用.NET/C#HttpClient的项目 由于项目是基于用户界面的(GTK),我的请求需要是异步的,以便能够更新进度条。 我发送不到1000个请求,收集结果,序列化它们,并将它们作为XML保存到文件中 这在Windows中运行得很好,但是在Linux中使用Mono运行我的应用程序时,请求的执行速度似乎要慢得多。 虽然在Windows中获取所有请求需要不到10分钟的时间,但Mono大约需要半个小时。 我所做的是使用HttpClient.GetStringAsync和Http

我目前正在做一个大量使用.NET/C#HttpClient的项目

由于项目是基于用户界面的(GTK),我的请求需要是异步的,以便能够更新进度条。 我发送不到1000个请求,收集结果,序列化它们,并将它们作为XML保存到文件中

这在Windows中运行得很好,但是在Linux中使用Mono运行我的应用程序时,请求的执行速度似乎要慢得多。 虽然在Windows中获取所有请求需要不到10分钟的时间,但Mono大约需要半个小时。 我所做的是使用HttpClient.GetStringAsync和HttpClient.GetAsync方法,同时使用.ConfigureAwait(false)等待它们,以确保它们不会阻塞我的UI线程。 我一直在重用HttpClient,所以我只创建了一次,并将其用于所有请求(这是推荐的方法)

我如何发送请求的一个简单示例如下所示:

using System.Net.Http;
using System.Threading.Tasks;

private async static Task<string> GetContent(HttpClient httpClient)
{
    return await httpClient.GetStringAsync("http://www.google.de").ConfigureAwait(false);
}

public async static void RetrieveData(){
    using(var httpClient = new HttpClient())
    {
        var responseContents = new List<string>();

        for (var i = 0; i < 1000; i++) 
        {
            var pageContent = await GetContent(httpClient).ConfigureAwait(false);
            responses.Add(pageContent);
        }
    }
}
使用System.Net.Http;
使用System.Threading.Tasks;
专用异步静态任务GetContent(HttpClient HttpClient)
{
返回等待httpClient.GetStringAsync(“http://www.google.de“”。配置等待(错误);
}
公共异步静态void RetrieveData(){
使用(var httpClient=new httpClient())
{
var responseContents=新列表();
对于(变量i=0;i<1000;i++)
{
var pageContent=await GetContent(httpClient).ConfigureAwait(false);
添加(页面内容);
}
}
}
我现在想知道的是:HttpClient的Mono实现是否有什么特别之处,因此我必须为它设置一些特殊的设置,使其能够像在Windows上一样快速工作

我已经认识到,XmlReader和XmlWriter需要更多的AttributeTag来序列化和反序列化类,因此Mono HttpClient可能也有一些特殊的特性

你知道这方面的情况吗,或者你可以简单地给我一个提示,HttpClient的Mono实现是否太慢了,我没有办法改变它

谢谢你的帮助

亲切问候,


Florian

请在没有任何代码概念的情况下包含一个,很难提出任何建议。@Elijan9:完成,谢谢。除了在Linux上,代码运行的位置是否有可能影响它?例如,Linux是否在虚拟机上,Windows是否在tin上?如果有的话,网络有什么不同?HttpClient的实现可能有差异,但这听起来有点像是在转移注意力,除非你已经调试过它,并把它作为一个特定的原因?我也经历过这一点。在运行linux/mono的服务器上,它应该比连接速度慢得多的windows机器慢得多。Webclient也一样慢。请在不了解您的代码的情况下包含一个,很难提出任何建议。@Elijan9:完成,谢谢。除了在Linux上,代码运行的位置是否存在可能影响它的差异?例如,Linux是否在虚拟机上,Windows是否在tin上?如果有的话,网络有什么不同?HttpClient的实现可能有差异,但这听起来有点像是在转移注意力,除非你已经调试过它,并把它作为一个特定的原因?我也经历过这一点。在运行linux/mono的服务器上,它应该比连接速度慢得多的windows机器慢得多。Webclient也一样慢。