我有一个用 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
.
相比之下,我想考虑第二种情况,其中全局对象是完全不同的东西,比如我想在调用之间保留的数据库连接(因为可能有很多)。那应该怎么做不同呢?