【发布时间】:2015-11-28 06:29:23
【问题描述】:
我有 2 个文件。 1 是源文件,2 是目标文件。
下面是我使用字节数组的交叉和联合两个文件的代码。
FileStream frsrc = new FileStream("Src.bin", FileMode.Open);
FileStream frdes = new FileStream("Des.bin", FileMode.Open);
int length = 24; // get file length
byte[] src = new byte[length];
byte[] des = new byte[length]; // create buffer
int Counter = 0; // actual number of bytes read
int subcount = 0;
while (frsrc.Read(src, 0, length) > 0)
{
try
{
Counter = 0;
frdes.Position = subcount * length;
while (frdes.Read(des, 0, length) > 0)
{
var data = src.Intersect(des);
var data1 = src.Union(des);
Counter++;
}
subcount++;
Console.WriteLine(subcount.ToString());
}
}
catch (Exception ex)
{
}
}
它以最快的速度运行良好。 但现在的问题是我想要计算它,当我使用下面的代码时,它变得非常慢。
var data = src.Intersect(des).Count();
var data1 = src.Union(des).Count();
那么,有什么解决办法吗? 如果是,那么请尽快让我知道。 谢谢
【问题讨论】:
-
为什么会变慢?因为他们使用延迟执行。意味着例如
src.Intersect(des)实际上并没有进行相交。但它准备好了。当你使用 Count 它开始相交。 ;) -
几点:注释
// get file length具有误导性,因为它是缓冲区大小。Counter不是读取的字节数,而是读取的块数。data和data1将以最后一个块读取的结果结束,忽略它们之前的任何数据。那是假设 while 循环中没有任何问题 - 您需要删除try结构以查看是否有任何错误。
标签: c# bytearray union filestream intersection