我有一个用Delphi编写的简单DLL。它提供了对某些只读数据进行操作的函数,这些函数作为资源嵌入。我发现每次调用时加载该资源的速度都很慢,所以我想将它放在一个在调用之间的对象中。
这样做的正确方法是什么?以下作品:
var
MyObject: TMyObject;
function ReportSomethingAboutMyObject(): Integer; stdcall; export;
exports ReportSomethingAboutMyObject();
begin
MyObject = TMyObject.Create;
LoadTheResourceIntoObject(MyObject);
end.
但我担心内存泄漏或其他意外行为。
如果对象是可读写的并且可能是非线程安全的,我很想知道答案会有什么不同。
根据要求,我将提供更具体的用例。我有一个嵌入在DLL中的文本文件(ini)作为资源,我只需要进行查找。如果我只加载一次资源并将其保存为TMemIniFile
或TStringList
以获得更简单的示例,那么这一切都会更快。加载后,内容不会改变。在将来,我希望能够更改更智能的数据结构,例如: TDictionary
。
相比之下,我想考虑第二种情况,其中全局对象是完全不同的东西,比如我想在调用之间保持的数据库连接(因为可能有很多)。那应该怎么做呢?
答案 0 :(得分:1)
如果您想要执行类似操作并确保内存不会泄漏,请尝试将缓存对象移动到一个单元中。将代码加载到initialization
和代码中以在finalization
中清除它。这些应该在分别加载和卸载DLL时自动调用。