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读慢呢?
{
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读慢呢?
缓冲区可提高读取和写入性能,使用缓冲区可进行读取或写入操作,但不能同时进行这两种操作。
不是可以提高性能吗?为神马我用了性能没提高?
使用 FileStream 类对文件系统上的文件进行读取、写入、打开和关闭操作,并对其他与文件相关的操作系统句柄进行操作,如管道、标准输入和标准输出。读写操作可以指定为同步或异步操作。FileStream 对输入输出进行缓冲,从而提高性能。