我有2个集合都包含相同类型的对象,并且两个集合每个都有大约40K对象.
每个集合包含的对象的代码基本上就像一个字典,除了我重写了equals和hash函数:
public class MyClass: IEquatable<MyClass>
{
public int ID { get; set; }
public string Name { get; set; }
public override bool Equals(object obj)
{
return obj is MyClass && this.Equals((MyClass)obj);
}
public bool Equals(MyClass ot)
{
if (ReferenceEquals(this, ot))
{
return true;
}
return
ot.ID.Equals(this.ID) &&
string.Equals(ot.Name, this.Name, StringComparison.OrdinalIgnoreCase);
}
public override int GetHashCode()
{
unchecked
{
int result = this.ID.GetHashCode();
result = (result * 397) ^ this.Name.GetSafeHashCode();
return result;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我用来比较集合并获得差异的代码只是使用PLinq的简单Linq查询.
ParallelQuery p1Coll = …Run Code Online (Sandbox Code Playgroud) 环境:3 GB数据文件,末尾附加28字节SHA-1校验和.
是否可以使用FileStream或其他类型的流来计算SHA-1校验和散列,方法是从位置0读取流到位置[x - 28(附加校验和的长度)],而无需从物理上删除附加的校验和文件的结尾第一个?
目前我们使用FileStream打开文件,然后使用BinaryReader读取它以查找和读取文件的最后28个字节.
然后使用FileStream再次打开文件,并将流的长度设置为长度--28个字节,这将从文件中删除校验和.
最后,我们计算数据文件的校验和,删除最后28个字节,然后将其与我们从文件末尾删除的校验和进行比较,以确保校验和匹配.
基本上我想知道是否可以计算文件数据部分的校验和,而不必先删除附加的校验和.