当实际下载发生为Http请求时

埃达杜尔·沙旺(Emdadul Sawon)

我正在从Amazon S3下载一个zip文件。然后,我将此zip转换为MemoryStream我的代码如下

AmazonS3Client s3Client = new AmazonS3Client(basicAwsCredentials, Amazon.RegionEndpoint.GetBySystemName(item.RegionEndPoint));
//This operation needs about 3-4s
response = await s3Client.GetObjectAsync(request);

var memoryStream = new MemoryStream();
//This operation needs about 8-9s
await response.ResponseStream.CopyToAsync(memoryStream);
memoryStream.Position = 0;

我的连接速度约为70-80KBs。我想知道为什么应对内存流需要太多时间?

我的另一个问题是,何时在任何http请求中进行实际下载?当我获得响应对象或从响应对象复制流时?

编辑

我实际上是从AWS S3下载一个zip文件,并使用MemoryStream这样解压缩文件-

var zipStream = new ZipInputStream(memoryStream);

我的zip大小约为2MB。那么哪个操作会更快?将zip保存到文件系统中,然后直接从MemoryStream提取还是提取?

达林·迪米特罗夫(Darin Dimitrov)

我的连接速度约为70-80KBs。我想知道为什么应对内存流需要太多时间?

这个问题很难回答。如果您要下载的文件太大,则将其复制到内存中会产生一些垃圾回收,这当然会带来相应的开销。显然,将文件流传输到Stream诸如aFileStream或a NetworkStream(取决于您要达到的目标和特定要求)之类的其他文件可能会提高性能,甚至允许您一次从Amazon下载多个文件而不会占用所有可用RAM并迫使操作系统将废话交换出磁盘上。

我的另一个问题是,何时在任何http请求中进行实际下载?当我获得响应对象或从响应对象复制流时?

当您awaitCopyToAsync方法调用上。CopyToAsync方法将小字节块从源流复制到目标流,直到到达源流的末尾。但是由于目的地Stream是a,所以MemoryStream您当然会失去分块复制的所有好处,因为最终会将整个文件加载到进程操作内存中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

AngularJS:使用$ http请求文件(json内容)时发生SyntaxError

来自分类Dev

向HTTP发出HTTP请求时发生错误->握手失败

来自分类Dev

调用http发布请求时发生错误。ClientException(无法解析HTTP,67与13不匹配)

来自分类Dev

调用函数时实际发生的情况

来自分类Dev

将请求发布到Node-http-proxy Node.js时发生套接字挂断

来自分类Dev

通过带有请求的HTTP下载文件时的进度栏

来自分类Dev

如何在从 post async http 请求下载数据时将数据加载到 reclyerview

来自分类Dev

使用Service下载时发生InstantiationException

来自分类Dev

使用Service下载时发生InstantiationException

来自分类Dev

在实际请求之前,正在发送 HTTP OPTIONS 请求

来自分类Dev

无法下载框-“下载远程文件时发生错误。”

来自分类Dev

记录 http 请求正文,如果发生异常

来自分类Dev

从HTTP请求下载图像触发断点

来自分类Dev

用笑话嘲笑请求时发生TypeError

来自分类Dev

错误。处理您的请求时发生错误

来自分类Dev

; [HPM]尝试代理请求时发生错误

来自分类Dev

HttpClient抛出“发送请求时发生错误”。

来自分类Dev

错误。处理您的请求时发生错误

来自分类Dev

处理您的请求时发生错误

来自分类Dev

请求 BACKEND API 时发生 Inavlid 凭据

来自分类Dev

当React组件返回时,实际发生了什么?

来自分类Dev

使用foreach / WhenAll时实际发生了什么?

来自分类Dev

执行“ ssh localhost”命令时实际发生的情况

来自分类Dev

输入Process.Start(string,string)时实际发生什么?

来自分类Dev

使用foreach / WhenAll时实际发生了什么?

来自分类Dev

下载大量文件时python请求挂起

来自分类Dev

RxJava - 每次事件发生时发出请求然后请求

来自分类Dev

节点https请求实际上是http

来自分类Dev

我如何获取我在node.js http请求中实际发送的http请求标头

Related 相关文章

  1. 1

    AngularJS:使用$ http请求文件(json内容)时发生SyntaxError

  2. 2

    向HTTP发出HTTP请求时发生错误->握手失败

  3. 3

    调用http发布请求时发生错误。ClientException(无法解析HTTP,67与13不匹配)

  4. 4

    调用函数时实际发生的情况

  5. 5

    将请求发布到Node-http-proxy Node.js时发生套接字挂断

  6. 6

    通过带有请求的HTTP下载文件时的进度栏

  7. 7

    如何在从 post async http 请求下载数据时将数据加载到 reclyerview

  8. 8

    使用Service下载时发生InstantiationException

  9. 9

    使用Service下载时发生InstantiationException

  10. 10

    在实际请求之前,正在发送 HTTP OPTIONS 请求

  11. 11

    无法下载框-“下载远程文件时发生错误。”

  12. 12

    记录 http 请求正文,如果发生异常

  13. 13

    从HTTP请求下载图像触发断点

  14. 14

    用笑话嘲笑请求时发生TypeError

  15. 15

    错误。处理您的请求时发生错误

  16. 16

    ; [HPM]尝试代理请求时发生错误

  17. 17

    HttpClient抛出“发送请求时发生错误”。

  18. 18

    错误。处理您的请求时发生错误

  19. 19

    处理您的请求时发生错误

  20. 20

    请求 BACKEND API 时发生 Inavlid 凭据

  21. 21

    当React组件返回时,实际发生了什么?

  22. 22

    使用foreach / WhenAll时实际发生了什么?

  23. 23

    执行“ ssh localhost”命令时实际发生的情况

  24. 24

    输入Process.Start(string,string)时实际发生什么?

  25. 25

    使用foreach / WhenAll时实际发生了什么?

  26. 26

    下载大量文件时python请求挂起

  27. 27

    RxJava - 每次事件发生时发出请求然后请求

  28. 28

    节点https请求实际上是http

  29. 29

    我如何获取我在node.js http请求中实际发送的http请求标头

热门标签

归档