Frage

Hey Stackoverflow-Community!

Ich habe ein Problem, wo ein hoch beteiligt algorithmisches Programm zu wenig CPU-Auslastung mit: irgendwo zwischen 3 und 4%. Es nimmt sehr lange Ergebnisse zurückgeben, und ich glaube, es ist einfach nicht hart genug arbeiten.

Hat jemand von euch Genies irgendwelche Ideen, warum dies geschehen würde - wenn alles, was ich 100% Auslastung erwarten. Ein zusätzliches Detail ist, dass das Programm macht Einsätze in eine sqlite3 Datenbank und somit ja, es gibt eine Menge von JNI-Anrufe über die sqlite3jdbc Bibliothek glaube ich. (Beachten Sie, dass ich diese Einsätze mit einem PreparedQuery Batch früher, aber dies verursachte große Gedächtnisprobleme verschieben wollte - es gibt eine Menge von Daten).

Vielen Dank im Voraus

UPDATE: Fest. Ja, ich wäre nur ein Idiot, aber ich habe nicht erwartet, dass SQLite würde eine neue Transaktion beginnen und so viel Aufwand tun.

ich jetzt ein PreparedStatement verwenden und 32.768 Einträge vor dem Einsetzen Warteschlange -. Schien wie eine gute genug Zahl mir

War es hilfreich?

Lösung

Offensichtlich sind die Datenbankaufrufe verursachen Verzögerungen. Ist es nicht eine Option zum Erstellen kleinere Chargen und testen, ob das hilft ?? Vielleicht könnten Sie den Algorithmus als auch parallelisieren eine Warteschlange irgendwo zu haben, Ergebnisse zu nehmen und ein anderer Thread, dass die Warteschlange Reinigung aus?

edit:

Es gibt auch einige andere Problembereiche:

  • Datenbank Optimalisierung (Modell)
  • Datenbank-Server-Konfiguration
  • Disk-Geschwindigkeit

Alle sollten diese Faktoren berücksichtigt werden

Andere Tipps

Ich würde nie empfehlen, dass jemand einen JDBC-Treiber mit JNI zu verwenden, wenn ein Typ IV, 100% Java-Version verfügbar ist. Google gefunden dieses .

Damit beiseite, kann ich nichts sagen, ohne weitere Informationen. Sind die App und die Datenbank auf derselben Hardware ausgeführt wird?

Was ist so "intensiv" über INSERTs ist?

würde ich empfehlen, Profilierung und bekommen einige echte Daten, anstatt zu raten. Faith-based Computing funktioniert für mich nie.

Wenn Sie eine Menge Daten schreiben, dann klingt es wie Sie Datenträger gebunden sein kann. Werfen Sie einen Blick auf Ihrer Festplatte io-Statistik auf der Maschine, und wenn das wirklich der Engpass, entweder findet Hardware mit besserer io, oder herauszufinden, wie weniger schreibt zu tun.

Die Scheibe verlangsamt sich Ihre App. EINSÄTZE die Diskette verwenden, Platte ist langsam, und das Betriebssystem muss für die Schreibvorgänge warten zu beenden.

Können Sie nicht zwei Threads verwenden, einen für den Algorithmus und eine andere für die Einsätze? Wenn Sie nur Einsätze machen, können Sie auch schreiben dann in eine Textdatei, und führen sie zu einem späteren Zeitpunkt

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top