我正在開發一個使用Digital Persona U.are.U 4000b指紋識別器的軟件。數字角色驗證過程花費大量時間與龐大的數據庫
它工作正常。但是我在指紋驗證過程中遇到了性能問題。
我的數據庫有大約3000個指紋登記在那裏,我需要在驗證過程中循環所有這些指紋。
但是每一次成功的指紋讀取大約需要7秒鐘來匹配我的數據庫的相應記錄(這取決於它的索引)。
對我來說這不是一個可以接受的場景,因爲我需要在20分鐘的時間內註冊(並且實時顯示他們的數據,照片......)至少400名學生。 這個問題真的是巨大的指紋數據庫,因爲當我用較小的指紋測試它時,它工作正常。
我使用.NET與C#和指紋的免費SDK。 的引起此故障代碼的行是一個,其被執行成FOREACH(對於數據庫中的每個登記的指紋):
verificator.Verify(features, template, ref result);
verificator
是DPFP.Verification.Verification
對象它把驗證過程;features
是一個DPFP.FeatureSet
對象,其中包含實際指紋的數據;template
是代表每個註冊指紋的對象DPFP.Template
;result
是一個DPFP.Verification.Verification.Result
對象,它包含每個指紋驗證的返回值。
這裏是整個process
方法:
protected void process(DPFP.Sample sample)
{
DPFP.FeatureSet features = ExtractFeatures(sample, DPFP.Processing.DataPurpose.Verification);
bool verified = false;
if (features != null)
{
DPFP.Verification.Verification.Result result = new DPFP.Verification.Verification.Result();
//"allTemplates" is an List<> of objects that contains all the templates previously loaded from DB
//There is no DB access in these lines of code
foreach (var at in allTemplates)
{
verificator.Verify(features, at.template, ref result);
if (result.Verified)
{
register(at.idStudent);
verified = true;
break;
}
}
}
if (!verified)
error("Invalid student.");
}
我是不是做正確嗎?
還有另一種做這種工作的方式嗎?
我會對數據庫進行配置文件以查看是否可以確定哪些查詢導致緩慢。一旦確定,你就可以開始研究如何潛在地提高性能。 – 2013-02-28 00:53:02
這個問題肯定與數據庫無關。我執行預先登記的指紋。所示的線是緩慢的原因。 – 2013-02-28 01:20:37
你怎麼知道顯示的行不在數據庫中? – 2013-02-28 02:58:31