class Program
    {
        const int dataArraySize = 200;
        const int streamBufferSize = 2000;
        const int numberOfLoops = 10000;
        static int totalSize = 0;
        static void Main(string[] args)
        {
            StringBuilder sbFS = new StringBuilder();
            StringBuilder sbBS = new StringBuilder();
            FileStream fs = new FileStream(@"E:\1.txt", FileMode.Open, FileAccess.Read);
            BufferedStream bs = new BufferedStream(fs, streamBufferSize);
            byte[] by = new byte[dataArraySize];
            int temp = 0;
            try
            {
                //FileStream Read
                DateTime startFS = DateTime.Now;
                while ((temp = fs.Read(by, 0, by.Length)) > 0)
                {
                    totalSize += temp;
                    //sbFS.Append(Encoding.GetEncoding("gb2312").GetString(by));
                }
                double endFS = (DateTime.Now - startFS).TotalMilliseconds;
                Console.WriteLine("FileStream Read TotalBit : {0}", totalSize);
                Console.WriteLine("FileStream Read Time : {0}", endFS.ToString("F5"));                //Reset
                temp = 0;
                totalSize = 0;
                Array.Clear(by, 0, by.Length);
                fs.Seek(0, SeekOrigin.Begin);                //BufferedStream
                DateTime startBS = DateTime.Now;
                while ((temp = bs.Read(by, 0, by.Length)) > 0)
                {
                    totalSize += temp;
                    //sbBS.Append(Encoding.GetEncoding("gb2312").GetString(by));
                }
                double endBS = (DateTime.Now - startBS).TotalMilliseconds;
                Console.WriteLine("BufferedStream Read TotalBit : {0}", totalSize);
                Console.WriteLine("BufferedStream Read Time : {0}", endBS.ToString("F5"));
            }
            finally
            {
                bs.Close();
                bs.Dispose();
                fs.Close();
                fs.Dispose();
            }
            Console.ReadLine();
        }
    }
本地准备了一个13M的txt文本.用FileStream直接Read.和BufferedStream的Read进行对比每次对比结果:FileStream Read TotalBit : 13664376
FileStream Read Time : 31.25000
BufferedStream Read TotalBit : 13664376
BufferedStream Read Time : 31.25000=============================================FileStream Read TotalBit : 13664376
FileStream Read Time : 15.62500
BufferedStream Read TotalBit : 13664376
BufferedStream Read Time : 31.25000=============================================FileStream Read TotalBit : 13664376
FileStream Read Time : 31.25000
BufferedStream Read TotalBit : 13664376
BufferedStream Read Time : 15.62500=============================================几次对比结果都是这样!为什么用了BufferedStream没有对效率提高多少呢?而且有时反而还比直接用FileStream读慢呢?

解决方案 »

  1.   

    BufferedStream类,可在另一流上添加并读取一个缓冲区,继承Stream抽象类。
    缓冲区可提高读取和写入性能,使用缓冲区可进行读取或写入操作,但不能同时进行这两种操作。
    不是可以提高性能吗?为神马我用了性能没提高?
      

  2.   

    比的是一个是用FileStream读,一个是用BufferedStream读
      

  3.   

    http://msdn.microsoft.com/zh-cn/library/system.io.filestream(v=vs.80).aspx
    使用 FileStream 类对文件系统上的文件进行读取、写入、打开和关闭操作,并对其他与文件相关的操作系统句柄进行操作,如管道、标准输入和标准输出。读写操作可以指定为同步或异步操作。FileStream 对输入输出进行缓冲,从而提高性能。
      

  4.   

    streamBufferSize的定义需要跟文件大小关联