这是我第一次来这里,只是想问一些我似乎找不到答案的问题。基本上,我创建了一个系统,该系统可以接受人的指纹并将其登录到系统中。但是随着时间的流逝,我有成千上万的记录,并且指纹搜索比以前慢得多。
我所做的基本过程是,从表中选择所有生物识别数据,并在代码中使用 foreach循环逐一进行指纹模板比较教直到找到合适的人。
您能提供一些提示以使我的选择更快吗?任何帮助将不胜感激。
using (conn = new SqlConnection(connString)) {
conn.Open();
using (comm = new SqlCommand("EXEC dbn.sp_opd_selectBiometrics", conn)) {
using (adap = new SqlDataAdapter(comm)) {
using (dt = new DataTable()) {
adap.Fill(dt);
if (dt.Rows.Count > 0) {
foreach (DataRow dr in dt.Rows) {
//Deserialize fingerprint template to bytes for verification
try {
byte[] _img = (byte[])dr["biometrics"];
string byteBiometrics = Encoding.UTF8.GetString(_img, 0, _img.Length);
getHcode = (string)dr["hpercode"];
MemoryStream ms = new MemoryStream(_img);
Template = new DPFP.Template();
Template.DeSerialize(ms);
Verificator = new DPFP.Verification.Verification();
// more code here...
}
}
}
}
}
答案 0 :(得分:2)
按文本搜索通常很慢,如果文本很大且数据很大,则搜索速度会变慢。我怀疑在比较纯.net
解决方案的情况下,您会在T-SQL
的上下文中得到更好的解决方案。
步骤如下:
bio-metrics-hash
列您可以开始搜索了。
在您的应用程序中,使用输入参数bio-metrics-data
调用存储过程。在该过程中,计算了该值的哈希值,并且仅按哈希值执行搜索。
请注意,根据您的生物识别数据大小,您可能需要使用不同的方法,但是想法是相同的。
在SQL Server 2016 +中,HASHBYTES函数允许最大值作为参数。