几十到上百k字符串输出,用
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.Write("一部分一部分");
HttpContext.Current.Response.End();还是
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.Write("用StringBuilder累加后的全部字符");
HttpContext.Current.Response.End();
哪个效率高,请细说,非常感谢!!!

解决方案 »

  1.   


    你输出的方式并没有变化只是比字符串+号拼接和StringBuilder哪个好。。用StringBuilder
      

  2.   

    StringBuilder类的对象在初始化时CLR会为对象在托管堆上分配一段较大的内存空间,每次调用Append()方法时会在已分配好的这段内存中添加内容,如果某一次调用Append()方法后内存空间不足,CLR就会重新分配一段内存给该对象使用,大小为原来的两倍,原来那段内存失去引用,等待垃圾管理器回收string类的对象每次改变值时都需要重新分配内存,显然如果经常改变字符串的值的话使用StringBuilder类系统资源的开销会小很多,但是如果不经常改变的话使用string类更好,因为string类有许多方法是StringBuilder类所没有的
      

  3.   

    把你的代码用StopWatch类测试一下就知道了。
    Stopwatch watch=new Stopwatch();
    watch.Start();
    .....
    watch.Stop();
    Response.Write(watch.ElapsedMilliseconds+"毫秒");
      

  4.   

    这是个字符串串联效率的问题,但我想楼上都理解错了。
    LZ的方法需要比对的是
    HttpContext.Current.Response.Write()和StringBuilder.Append()这两个方法做字符串串联效率,而不是 +运算 和 StringBuilder.Append()的效率比对。 曾在stackoverflow看过HttpContext.Current.Response.Write()串联效率的说明,其比+运算高出很多,其将字符流写入到一个缓冲区,最后再一次性输出来,原理和StringBuilder异曲同工,但HttpContext.Current.Response.Write()个StringBuilder.Append()的效率高低我无法直接给出结论,现在手头没有工具测试,建议LZ写个测试代码测试一下。
    如果HttpContext.Current.Response.Write()和StringBuilder.Append()效率几乎一样,那么无疑用HttpContext.Current.Response.Write(),因为StringBuilder的创建到最后ToString的过程有额外的开销。
      

  5.   

    StringBuilder 的优势不是看文本的多少,而是看文本的拼接次数,尤其是长文本的拼接次数。对于文本来说,几百K不算什么大量。