不错呦!smile@林凯西,确保“准备文件”中的几个文件都有安装,S...您好,看了您这篇帖子觉得很有帮助。但是有个问题想请...我的修改过了怎么还被恶意注册呢 @jjjjiiii 用PJ快9年了,主要是A...PJ3啊,貌似很少有人用PJ了,现在不是WP就是z...@332347365,我当时接入时错误码没有-10...楼主,ChkValue值应为-103是什么意思呢?...大哥 你最近能看到我发的信息,请跟我联系,我有个制...
C#合并文件的一些测试数据
编辑:dnawo 日期:2011-12-27
手上有50个txt文件需要合并成一个txt文件,每个txt大小在35M左右,以前收集的一个文本合并工具不好用,于是用C#写个工具来完成。在编码过程中产生了几个疑问,不确定对合并效率有无影响,便做了一些测试。
疑问一:目标文件始终打开和多次打开对文件合并时间有无影响?
文件合并思路为逐个打开原始文件,读取到一个字节数组进行缓存,然后将字节数组的内容存储到目标文件中,这边有个疑问:目标文件始终打开和需要写入时再打开(多次打开),对文件合并时间有没有影响?下边为测试过程。
1.测试代码
方法一:始终打开目标文件
方法二:多次打开目标文件
2.测试步骤
记录下合并每个文件所需的时间(单位:毫秒),每个方法各测十次。
3.测试结果

从图表可知,两个方法的合并完文件的时间基本一样,没有什么大的差别。但对每个文件合并的时间取平均值时并进行分析时发现了一个有意思的事情:

从图表可知,合并前10个文件所用的时间总是比较快,不知什么原因。
疑问二:不同大小的缓冲区对文件合并时间有无影响?
文件合并过程中需要设置一个字节数组做为缓冲区,上边测试过程中缓冲区大小为1M,不同大小的缓冲区对文件合并时间有没有影响?下边为测试过程。
1.测试代码
2.测试步骤
记录下合并每个文件所需的时间(单位:毫秒),将bytes的大小依次设置为1M、10M、100M进行测试,三种类型都做十次测试。
3.测试结果

从图表可知,缓冲区较小时,合并文件所需的时间稍长,当缓冲区达到一定值时,所需时间会达到一个比较稳定的值,这时区别就没那么明显了。
疑问一:目标文件始终打开和多次打开对文件合并时间有无影响?
文件合并思路为逐个打开原始文件,读取到一个字节数组进行缓存,然后将字节数组的内容存储到目标文件中,这边有个疑问:目标文件始终打开和需要写入时再打开(多次打开),对文件合并时间有没有影响?下边为测试过程。
1.测试代码
方法一:始终打开目标文件
复制内容到剪贴板
程序代码

int length = 0;
byte[] bytes = new byte[1024 * 1024];
using (FileStream fStream = File.Open(@"D:\tianya\tianya_users1.txt", FileMode.Append, FileAccess.Write))
{
for (int i = 1; i <= 50; i++)
{
using (FileStream fStream2 = File.Open(@"D:\tianya\tianya_" + i.ToString() + ".txt", FileMode.Open))
{
while ((length = fStream2.Read(bytes, 0, bytes.Length)) > 0)
{
fStream.Write(bytes, 0, length);
}
}
}
}
byte[] bytes = new byte[1024 * 1024];
using (FileStream fStream = File.Open(@"D:\tianya\tianya_users1.txt", FileMode.Append, FileAccess.Write))
{
for (int i = 1; i <= 50; i++)
{
using (FileStream fStream2 = File.Open(@"D:\tianya\tianya_" + i.ToString() + ".txt", FileMode.Open))
{
while ((length = fStream2.Read(bytes, 0, bytes.Length)) > 0)
{
fStream.Write(bytes, 0, length);
}
}
}
}
方法二:多次打开目标文件
复制内容到剪贴板
程序代码

int length = 0;
byte[] bytes = new byte[1024 * 1024];
for (int i = 1; i <= 50; i++)
{
using (FileStream fStream = File.Open(@"D:\tianya\tianya_users2.txt", FileMode.Append, FileAccess.Write))
{
using (FileStream fStream2 = File.Open(@"D:\tianya\tianya_" + i.ToString() + ".txt", FileMode.Open))
{
while ((length = fStream2.Read(bytes, 0, bytes.Length)) > 0)
{
fStream.Write(bytes, 0, length);
}
}
}
}
byte[] bytes = new byte[1024 * 1024];
for (int i = 1; i <= 50; i++)
{
using (FileStream fStream = File.Open(@"D:\tianya\tianya_users2.txt", FileMode.Append, FileAccess.Write))
{
using (FileStream fStream2 = File.Open(@"D:\tianya\tianya_" + i.ToString() + ".txt", FileMode.Open))
{
while ((length = fStream2.Read(bytes, 0, bytes.Length)) > 0)
{
fStream.Write(bytes, 0, length);
}
}
}
}
2.测试步骤
记录下合并每个文件所需的时间(单位:毫秒),每个方法各测十次。
3.测试结果

从图表可知,两个方法的合并完文件的时间基本一样,没有什么大的差别。但对每个文件合并的时间取平均值时并进行分析时发现了一个有意思的事情:

从图表可知,合并前10个文件所用的时间总是比较快,不知什么原因。
疑问二:不同大小的缓冲区对文件合并时间有无影响?
文件合并过程中需要设置一个字节数组做为缓冲区,上边测试过程中缓冲区大小为1M,不同大小的缓冲区对文件合并时间有没有影响?下边为测试过程。
1.测试代码
复制内容到剪贴板
程序代码

int length = 0;
byte[] bytes = new byte[1024 * 1024];
using (FileStream fStream = File.Open(@"D:\tianya\tianya_users1.txt", FileMode.Append, FileAccess.Write))
{
for (int i = 1; i <= 50; i++)
{
using (FileStream fStream2 = File.Open(@"D:\tianya\tianya_" + i.ToString() + ".txt", FileMode.Open))
{
while ((length = fStream2.Read(bytes, 0, bytes.Length)) > 0)
{
fStream.Write(bytes, 0, length);
}
}
}
}
byte[] bytes = new byte[1024 * 1024];
using (FileStream fStream = File.Open(@"D:\tianya\tianya_users1.txt", FileMode.Append, FileAccess.Write))
{
for (int i = 1; i <= 50; i++)
{
using (FileStream fStream2 = File.Open(@"D:\tianya\tianya_" + i.ToString() + ".txt", FileMode.Open))
{
while ((length = fStream2.Read(bytes, 0, bytes.Length)) > 0)
{
fStream.Write(bytes, 0, length);
}
}
}
}
2.测试步骤
记录下合并每个文件所需的时间(单位:毫秒),将bytes的大小依次设置为1M、10M、100M进行测试,三种类型都做十次测试。
3.测试结果

从图表可知,缓冲区较小时,合并文件所需的时间稍长,当缓冲区达到一定值时,所需时间会达到一个比较稳定的值,这时区别就没那么明显了。
评论: 0 | 引用: 0 | 查看次数: 4425
发表评论
请登录后再发表评论!