win10 
vs2019(v16.3.6) 
.netFramework4.8代码:
using System;
using System.Net;namespace HttpDownloadTest
{
    internal static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        private static void Main()
        {
            HttpDownload();
        }        private static void HttpDownload()
        {
            //一个可以下载的东西   试过jpg png等图片不会引发问题
            var url = "https://dlsvr04.asus.com.cn/pub/ASUS/mb/07VGA/DRV_VGA_Intel_DCH_TP_W10_64_VER26201006911_20190718R.zip";            var request = (HttpWebRequest)WebRequest.Create(url);            try
            {
                var response = (HttpWebResponse)request.GetResponse();                using (var responseStream = response.GetResponseStream())
                {
                    //此处省去保存流数据的代码,但即使没有任何代码,依然会引起下面的异常
                }   //**************问题点  此处引发的异常:“System.ObjectDisposedException”(位于 System.dll 中)***************
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
            finally
            {
                request.Abort();
            }
        }
    }
}
请看第31行的问题点虽然这里的异常已经被处理,并不会引起程序崩溃.但当调试运行,大量下载文件的时候输出窗口中出现该异常的大量信息,都快把其它有用的信息淹没了.让人很不爽.那么,这种情况究竟是上面的程序没写好还是.netFramework自身的问题?
如果是上面的程序没写好,应该如何改进?谢谢指教.附: 异常的详细信息System.ObjectDisposedException
  HResult=0x80131622
  Message=无法访问已释放的对象。
ObjectDisposed_ObjectName_Name
  Source=System
  StackTrace:
   在 System.Net.Sockets.NetworkStream.get_InternalSocket()Message 无法访问已释放的对象。
对象名:“System.Net.TlsStream”。

解决方案 »

  1.   

    当文件过大时,超出HttpWebRequest对象的缓冲区,这时会引起崩溃,如果下载大文件建议不使用asp.net本身的文件上传下载服务。
      

  2.   

    去掉using,dispose并不能释放托管内存
      

  3.   

    你贴的代码本身没有问题。
    HttpWebResponse和responseStream两个必须销毁一个,否则系统不会关闭http连接,可能造成连接池泄露。HttpWebResponse可以用using销毁,不过销毁以后,就不能进行GetResponseStream等操作。
    你可以查验你的源码,看是否有这种情况。
      

  4.   

    还没等到stream返回也许response已被释放了。。