zoukankan      html  css  js  c++  java
  • 文件下载中遇到的二个现象,不知如何解释

        发个牢骚先:搞什么,新手就不能一天写两篇以上的新手区文章!新手歧视嘛。

        这篇文章是用来提问题的,所以你可能从中什么也学不到,如果浪费了你的时间,很抱歉。

        二个问题

    1、为什么会url直接下载>>HTTPS时下载的速度>>HTTP时下载的速度

    2、400M不到的文件,下载过程中inetinfo的虚拟内存居然达到了近2G,那时客户端才下了3M不到

        先描述下场景。这个页面负责文件下载,下载的文件在局域网的另一台机器上(download server),ASPX页面在web server上。在web上做了https,可以通过https或者http访问这个页面;局域网的速度10MB/s;下载的文件大小:363,895KB。

       web服务器配置


        最初的代码是把download server上的文件一股脑的读入内存,然后在传输到客户端。

     

    监视了下整个下载过程

    (1)任务管理器


    (2)性能


     

    我对上图的理解是,第一阶段,把远端的文件全部读入web服务器上的asp.net进程占用的内存中(文件363,895KB),在这期间CPU始终保持100%,CPU使用率之所以这么高,是由于局域网的10M速度造成(速度下降到1M时,CPU在60%上下)。

    第二阶段,ASP.net的内存迅速上升(远高于文件实际大小),此时IIS进程也不甘人后,可用内存则迅速降低。在IIS的使用内存达到恒定后,客户端弹出保存对话框

    第三阶段, 文件传输到客户端。cpu使用率下降,可用内存升高。

    可以看出这段代码存在许多问题,尤其是在下载大文件时,ASP.net超出60%物理内存后会被回收,可用内存不够用,CPU 长时间100%。

    附张局域网速度1M时的:

     

    为了解决这些问题,试了一些方法,但都不成功。或许某人说的对,用纯.net的方案是无解的。一个的非纯.net解决方案是ISAPI Filters+HttpHandler,限于本人水平有限,写不来那个ISAPI Filters。

    前话表述完了,开始说说自己遇到的几个问题

    1、url直接下载>>HTTPS时下载的速度>>HTTP时下载的速度(Why)

    看到别人为了解决耗内存,用了句Response.Flush()

    用了下,帮助不大

     

    (1)用HTTPS访问该页面时

    客户端下载速度

     

    性能


    (2)用HTTP访问该页面时

    客户端下载速度

     

    性能


    同样的代码在Https、Http访问时有不同的表现,这让我很诧异。1、下载速度差的离谱,即使是较快的https,也只有带宽的1/10;http更别提了,下了没几M,自己就停止传输了。CPU和速度还是有很大的关系,https时的持续100%,http时的5%不到。唯一的亮点是可用内存好多啊。

    这里,我的问题就是为什么会url直接下载>>HTTPS时下载的速度>>HTTP时下载的速度

    2、400M不到的文件,下载过程中inetinfo的虚拟内存居然达到了近2G,那时客户端才下了3M不到(Why)

    换了个想法(从结果看很不成熟的想法)。开了个线程去取数据到内存里放着,主线程把这些数据传給客户端。

    代码如下

    队列成员

    循环队列


    下载类


    页面下载代码

    这里依旧有url直接下载>>HTTPS时下载的速度>>HTTP时下载的速度的问题

    (1)先看HTTPS

    下载速度


    任务管理器


    (2)再看HTTP的



    文件也才400M不到,为什么inetinfo的虚拟内存就占用了近2G?


    参考:

    Optimizing the Downloading of Large Files in ASP.NET 

  • 相关阅读:
    How To : OCR / Vote disk Maintenance Operations: (ADD/REMOVE/REPLACE/MOVE)
    循序渐进解读Oracle AWR性能分析报告
    为11gR2 Grid Infrastructure增加新的public网络
    12C开始oracle实现了SCALABLE LGWR多进程并行写redo log
    万字详解Oracle架构、原理、进程,学会世间再无复杂架构
    PowerShell 连接SQL Server 数据库
    Oracle 性能分析与诊断|跟踪诊断&优化SQL 语句
    安装oracle 11gr2 rac on solaris
    oracle EOS
    K8S集群认证之RBAC
  • 原文地址:https://www.cnblogs.com/wordmy/p/1431817.html
Copyright © 2011-2022 走看看