C#合并文件的一些测试数据

手上有50个txt文件需要合并成一个txt文件,每个txt大小在35M左右,以前收集的一个文本合并工具不好用,于是用C#写个工具来完成。在编码过程中产生了几个疑问,不确定对合并效率有无影响,便做了一些测试。

疑问一:目标文件始终打开和多次打开对文件合并时间有无影响?

文件合并思路为逐个打开原始文件,读取到一个字节数组进行缓存,然后将字节数组的内容存储到目标文件中,这边有个疑问:目标文件始终打开和需要写入时再打开(多次打开),对文件合并时间有没有影响?下边为测试过程。

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);
            }
        }
    }
}

方法二:多次打开目标文件
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);
            }
        }
    }
}

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);
            }
        }
    }
}

2.测试步骤

记录下合并每个文件所需的时间(单位:毫秒),将bytes的大小依次设置为1M、10M、100M进行测试,三种类型都做十次测试。

3.测试结果



从图表可知,缓冲区较小时,合并文件所需的时间稍长,当缓冲区达到一定值时,所需时间会达到一个比较稳定的值,这时区别就没那么明显了。

评论: 0 | 引用: 0 | 查看次数: 4239
发表评论
登录后再发表评论!