我有一个大文件,我必须发送到web api客户端...数据是多部分。问题是,如果文件是通过http web请求发送的,那么它会在webapi上快速上传。对于此请求,文件内容将直接写入请求流。
就好像通过Httpclient(.net 4.5)发送相同的文件一样,与http web请求相比,上传速度很慢。我在Httpclient post async中使用multipartformdatacontent。
那么,对于大文件,我们是否只能使用Web请求?或者Httpclient上是否有任何设置可以加快上传速度?
HttpClient
更像是一个无头浏览器。如果您要创建许多http请求,它是一个功能强大且理想的工具。例如,您可以设置默认标题和内容。以下是与HttpWebRequest
取得的here不同的前五种方式
我正在使用带有httpclient的FileStreamContent ......但是当我使用ByteArrayContent时,它运行正常。
我不确定这是如何以及为什么会产生差异,但在流上发送字节是一种更好的方式,而不是发送流
也许你在using
块中实例化HttpClient,这可以解释性能问题。例如。
using (var httpClient = new HttpClient() )
{
var result = await httpClient.GetAsync("http://example.com");
Console.WriteLine(result.StatusCode);
}
这里HttpClient的实例在请求之后立即处理,而它应该可以说是一个长期存在的对象(例如,应用程序的生命周期)。
[编辑 - 添加上下文]
处置实例也会关闭连接,但会使套接字处于等待状态一段时间。对于此代码的每次执行,操作系统将尝试创建新的套接字连接,并且由于对其完成速度的限制,可能会出现性能/可靠性问题。
重用相同的HttpClient实例意味着更好地重用开放套接字并更有效地使用系统资源。
更多信息here。