不知道你是什么文件,如果是数据库,取决于数据库本身和网络,你可以使用一些内存数据库加快读取
如果是文件,那么如果太大会导致卡死,体验非常不好,你用内存映射,分块读取,这样体验会好
datagridview用虚拟显示应该可以了,你可以只填充看到的那几行数,滚动时再显示其他数据

解决方案 »

  1.   

    ..那么多的数据 就算txt你打开都费劲..
    实际上 加大配置应该是可以加快速度的.. 不如 你买一个E7-8800的CPU外加1024G的内存 ..
      

  2.   

    可以考虑试下异步IO的方法,
    有篇参考文章:
    windows异步IO和IOCP。
    http://blog.csdn.net/ztz0223/article/details/7791220
      

  3.   

    我觉得如果文件格式只是类似于纯文本的话,可以提高速度但是处理起来有点麻烦。如果你从数据库读取一个没有索引也没有缓存的表,实际上速度也是很慢的。其实一次读取百万条数据显示给用户看,不仅在技术上有困难,需求本身也有问题,一个人在同一时间在同一个界面上能同时浏览和处理的数据是非常有限的,所以一次性把数据都显示出来是没有意义的。所以我觉得需要从几方面解决这个问题
    1. 不要一次读取全部数据,读一部分显示一部分
    2. 不要一次显示全部数据,用户一次能处理多少就给他显示多少
    3. 如果要实现读一部分的话,读取的时候控制读取 Buffer 的大小以及读取的 Offset,然后插入到要显示的 View 里面
      

  4.   

    这么牛XXXX的逻辑。。膜拜死你了。哦,错了,膜拜死你老板了
      

  5.   

    换个SSD硬盘。
    机械硬盘一次给你读取那么多数据,压力太大。
      

  6.   

    设置web程序高速缓存大小
    //配置<cache>元素设置
      <caching>//开发人员可以调整这5种选项
                <!--应用程序数据缓存设定-->
                <cache disableExpiration="false" privateBytesLimit="1024" disableMemoryCollection="false" percentagePhysicalMemoryUsedLimit="80" privateBytesPollTime="00:01:00"/>
            </caching>
    //将缓存数据循环读取并设置缓存内存KB数值大小
    protected void Page_Load(object sender, EventArgs e)
        {
            Cache["Name"] = "张兆英";//加入缓存
            Cache["Height"] = 160;
            Cache["Weight"] = 55;
            
            IDictionaryEnumerator CacheIDE = Cache.GetEnumerator();//显示缓存数据,
            int i = 1;
            string info = null;
            Response.Write("缓存项目数据(Key / Value):" + "<br>");
            while (CacheIDE.MoveNext())
            {
                info = i.ToString() + ". ";
                info += CacheIDE.Key.ToString() + " : ";
                info += CacheIDE.Value.ToString() + "<br>";
                Response.Write(info);
                i++;
            }
            //Cache数值使用上记得要明确类型
            int index = Convert.ToInt16(Cache["Height"]) - Convert.ToInt16(Cache["Weight"]);
            Response.Write("身高减去体重=" + index + "<br><br>");
            //计算缓存项目的总数目
            Response.Write("缓存项目总数:" + Cache.Count + "<br>");
            //缓存内存KB数大小
            Response.Write("缓存可使用内存大小:" + String.Format("{0:N0}", Cache.EffectivePrivateBytesLimit) + " Bytes<BR>");
        }
      

  7.   

    为毛要读大量数据放入内存?Stream不需要全部从硬盘读出,只需要读你需要读的那一段就可以了。
    既然你用了虚模式,那就把虚模式研究好。理论上用户只需要看到屏幕上显示的那些数据。
    当你用写字板打开一个500m的Txt时,几乎是不可能完成的任务,但是换作word或者其他文字编辑工具,就非常轻松,好好想想是为什么。