Delphi で記述された単純な DLL があります。リソースとして埋め込まれた読み取り専用データを操作する関数を提供します。各呼び出しでそのリソースをロードするのは非常に遅いことがわかったので、呼び出し間で固執するオブジェクトに入れたいと思います。
これを行う正しい方法は何ですか?以下の作品:
var
MyObject: TMyObject;
function ReportSomethingAboutMyObject(): Integer; stdcall; export;
exports ReportSomethingAboutMyObject();
begin
MyObject = TMyObject.Create;
LoadTheResourceIntoObject(MyObject);
end.
しかし、メモリリークやその他の予期しない動作が心配です。
オブジェクトが読み書き可能であり、非スレッドセーフである可能性がある場合、答えがどのように異なるかを知りたいと思います。
更新 1
リクエストに応じて、より具体的なユースケースを提供します。リソースとして DLL に埋め込まれたテキスト ファイル (ini) があり、ルックアップのみを行う必要があります。リソースを一度だけロードして、より単純な例として保持すると、すべてがはるかに高速に機能しTMemIniFile
ますTStringList
。ロード後、コンテンツは変更されません。将来的には、データ構造をよりスマートなものに変更できるようにしたいと考えていますTDictionary
。
対照的に、グローバル オブジェクトがまったく異なるものである 2 番目のケースを検討したいと思います。たとえば、データベース接続など、呼び出し間で保持したい (非常に多くの場合があるため)。では、どのように別の方法で行う必要がありますか?