0

我有一个用 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.

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

4

1 回答 1

1

如果您想做类似的事情并确保内存不会泄漏,请尝试将缓存对象移动到一个单元中。将加载它initialization的代码和清理它的代码放入finalization. 这些应该分别在加载和卸载 DLL 时自动调用。

于 2013-04-01T22:35:56.073 回答