zoukankan      html  css  js  c++  java
  • StreamReader的缓冲区大小不够,导致上传的文件只处理了一部分

    截取原始代码的一部分

        StreamReader sr = new System.IO.StreamReader(stream, encoding);
                        //sr.DiscardBufferedData();
    
                        int TotalCount = 0;
    
                        using (sr)
                        {
    
                            int line = 0;
                            while (sr.Peek() > 0)
                            {
                                ++line;
                                
                                    string temp = sr.ReadLine();


    stream是上传的文件流

    文件是csv格式,我是分批处理了。文件总共2万行,每次处理1千行。文件大小716KB。

    在vs中调试的时候正常,但是发布到IIS后,每次处理了2千行后崩溃。后来每次处理200行,500行,1500行都是在2000行附近崩溃。

    初步判断堆栈溢出类似问题。

    后来查了系统日志,报告ReadLine方法内部“尝试读取的文件已经关闭”。

    后来改成:

     StreamReader sr = new System.IO.StreamReader(stream, encoding,true,256*1024);

    发现大概到7千行时停止。那么问题就出在这里。

    现在这样写:

     StreamReader sr = new System.IO.StreamReader(stream, encoding,true,Convert.ToInt32( stream.Length));

    可以把文件读完。

    弊端就是文件长度不能超过Int32.MaxValue个字节。

    另外发现一个以前困扰我的问题:

    背景线程与普通线程的区别:就是背景线程发生异常不影响主线程。实际测试发现。

  • 相关阅读:
    VS中的DataPager分页
    获取select标签选中的值
    JS判断包括IE11在内的IE浏览器
    几款jQuery右键菜单插件
    java day2
    java day1
    转换成(大)小写字母
    模态框扩展
    自定义动画,点赞
    反选
  • 原文地址:https://www.cnblogs.com/langu/p/3049641.html
Copyright © 2011-2022 走看看