私はDelphiXE2をDISQLitev3(基本的にSQLite3の移植版)と一緒に使用しています。同時書き込みがないことを除いて、SQLite3のすべてが大好きです。特に、このプロジェクトではマルチスレッドに大きく依存しています:(
私のプロファイラーは、それについて何かをする必要があることを明らかにしたので、このアプローチを使用することにしました。
DBにレコードを挿入する必要があるときはいつでも、INSERTを実行する代わりに
write
、特別なフォーラーでSQLクエリを実行します。WriteToFile_Inline(SPECIAL_FOLDER_PATH + '\' + GUID, FileName + '|' + IntToStr(ID) + '|' + Hash + '|' + FloatToStr(ModifDate) + '|' + ...);
毎分
timer
起動する(メインアプリスレッドに)を追加し、これらのファイルを解析してから、トランザクションを使用してクエリを挿入します。最後にそれらの一時ファイルを削除します。
その結果、パフォーマンスが500%向上しました。さらに、この手法はACIDSPECIAL_FOLDER_PATH
です。停電後はいつでもスキャンして、見つけたINSERTを実行できます。
良い結果にもかかわらず、私は使用された方法にあまり満足していません(控えめに言ってもハックです)、高速ルックアップアクセス、スレッドセーフ、ACIDリストのようなジェネリックがあれば、これははるかにクリーン(そしておそらくより速い?)
だから私の質問は:Delphi XE2についてそのようなことを知っていますか?
PS。上記のコードを読んでいる多くの人がショックを受けていると信じており、この時点で私を侮辱し始めます!私のゲストになってください、しかしあなたがより良い(すなわちより速い)ACIDアプローチを知っているなら、あなたの考えを共有してください!