Ich habe eine Anwendung, die eine Galerie von Bildern (alle in Jpeg) aufnimmt und Ähnlichkeitswerte zwischen jedem möglichen Paar gibt. Zu jedem Zeitpunkt kann nur ein Paar ausgewählt und der Ähnlichkeitswert angezeigt werden.
Der Algorithmus, der die zwei Bilder vergleicht, hat einen gewissen Leistungsaufwand, so dass es ein paar Sekunden dauert, ein Paar zu vergleichen.
Wenn zwei Bilder ausgewählt sind:
Beispiel (wenn Sie einen Batch ausführen): Ссылка
Wenn ein Punktestand nie berechnet wurde und ein Benutzer auf "Punktestand" klickt, wechselt das Feld zu "Berechnung ..." und zeigt dann den Punktestand an, wenn die Berechnung abgeschlossen ist.
Vor dem Anzeigen von irgendetwas im Feld der Partitur, wenn zwei Paare ausgewählt sind, wird ihr angehängtes Bitmap an eine HashMap gesendet, die überprüft, ob diese beiden Bitmaps bereits eine angehängte Punktzahl haben. In diesem Fall wird sie einfach zurückgegeben. Wenn kein Ergebnis vorhanden ist, wird der Job in die Warteschlange gesendet.
Um zu wissen, ob der Punktestand im Cache existiert, muss ich einen Weg finden, das Paar zu hashen, so dass ich den resultierenden Schlüssel verwenden kann, um den Cache zu suchen. Da ist mein Problem. Um sinnvoll zu sein, sollte das Hashing der beiden Bitmaps schnell sein. Ansonsten füge ich einfach eine weitere Berechnungsschicht hinzu. Aber die Art und Weise, wie ich bisher die zwei Bitmap hashen soll, besteht darin, sie in einem Byte-Array zu senden und ihre MD5-Prüfsumme zu erhalten. So:
%Vor% Allerdings kostet diese Methode nach dem Profiling, das ich gemacht habe, ungefähr 53 ms, was eine Verzögerung in der Benutzeroberfläche verursacht, die ziemlich unangenehm ist. TIn detaillierterer Profilerstellung habe ich festgestellt, dass ungefähr 95% der Rechenzeit in den compress
Methoden gemacht wird. Ich habe jedoch keine andere Möglichkeit gefunden, die Bytes zu erhalten, die die Bitmaps unterstützen.
Ich weiß, dass mein Weg, die Bitmap zu hacken, ziemlich brutal ist. Aber ich weiß nicht viel über Hashfunktionen und welche Teile einer Bitmap ich verwenden könnte, um die Dateien eindeutig zu identifizieren. Ich möchte den Dateinamen oder etwas ähnliches nicht verwenden, da ich diese Bitmaps schließlich in einer Datenbank senden möchte.
[Update 1] Ich wusste nichts über Object.hashCode (). Nun habe ich die Methode folgendermaßen modifiziert:
%Vor%Was im Durchschnitt etwa 18 US-Dollar kostet.