Delphi 中的泛型会导致性能瓶颈吗?

2024-03-19

最近我一直在开发一个应用程序,想要拥有多种类型的集合。我不想为其类型声明和实现新的集合类。因此,我考虑使用泛型,但不确定泛型与普通类型实例相比的性能。性能是我关注的主要因素。我的应用程序对时间要求很高,甚至损失几百毫秒也是不可取的。

我使用的是德尔福XE3

For eg:

ICollectionItem = interface
  function GetID : string;
  property ID : string read GetId;
end;

TGenericCollection<T: ICollectionItem> = class
  function Add(T) : Integer;
end;

相比

TSomeClass = class(TInterfacedObject, ICollectionItem)
  function GetId : string;
end;

TSomeClassList = class
  function Add(item : TSomeClass) : Integer;
end;

无性能瓶颈

Delphi 泛型是compiled。编译器知道具体类型compile时间,它会尽力为您提供最好的代码。在运行时检查生成的代码时,通用代码和非通用代码之间不应存在差异。

使用泛型获得更好的代码是一个很好的机会,因为您更有可能使用现成的、高效的、类型安全的数据结构。当你自己动手时,你可能会走捷径,因为说实话,编写排序算法、高效分配等是hard.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Delphi 中的泛型会导致性能瓶颈吗? 的相关文章

随机推荐

  • 如何使用云功能从Firestore删除数据

    我正在结合谷歌的 Firestore 数据库编写云函数 我正在尝试编写递归删除更多数据 我找不到访问和删除数据库其他部分中的数据的语法 我已有的代码如下 exports deleteProject functions firestore d
  • Doctrine2 ,通过多对多属性的计数获取实体顺序

    我有两个实体 Article User 文章与名为 likedByUsers 的用户相关 现在 我想按喜欢的数量排序文章 但是 我不想拥有 numberOfLikes 属性 因为更新它太麻烦了 我有太多文章 100k 无法在 PHP 端进行
  • 如何在c中给蒙版上色

    如何对红色 绿色和蓝色值的 32 位无符号整数进行颜色掩码 是这样的吗 要遮盖的颜色 gt gt 8 这应该会得到你想要的结果 short red color gt gt 16 0xFF short green color gt gt 8
  • 如何在javascript中将pdf文件上传到s3?

    我需要将 pdf 文件从 UI 用 Javascript 编写 上传到 Amazon S3 但我正在尝试将该文件上传到 S3 我收到一些 unicode 格式文本 当我将该文本复制到记事本时 或者说任何其他文本文本编辑器我可以人类可读的文本
  • AutoMapper:“忽略其余的”?

    有没有办法告诉 AutoMapper 忽略除了显式映射的属性之外的所有属性 我有外部 DTO 类 这些类可能会从外部发生更改 并且我希望避免显式指定要忽略的每个属性 因为在尝试将它们映射到我自己的对象中时添加新属性会破坏功能 导致异常 据我
  • MySQL触发器将字段更新为id的值

    我想要一个触发器来对插入的记录执行以下操作 pseudocode if new group id is null set new group id new id else don t touch it end 更清楚地说 假设我有一张包含三
  • 更改连接字符串并在运行时重新加载 app.config

    当我使用此代码更改连接字符串时 它不会重新加载app config在运行时 我希望它能够像我们重新加载一样重新加载app config config ConnectionStrings ConnectionStrings JVVNL NEW
  • Tensorflow 对象检测:ImportError:没有名为 nets 的模块

    我目前正在尝试在 Windows 7 上安装 tensorflow 对象检测应用程序 雇主要求 但距离最后几个步骤都失败了 基本上 当我运行安装测试命令时 出现以下错误 导入错误 没有名为 nets 的模块 我读过一些关于这个主题的解决方案
  • 计算并生成完全平方数

    我需要一些关于如何编写 Python 程序的建议 该程序以列表格式提供前 n 个完全平方数的列表 输出应如下所示 How many squares 5 1 4 9 16 25 这是我到目前为止所拥有的 n int raw input How
  • 如何在 WPF 4.0 中创建发光的 TextBox?

    我正在尝试创建一个文本框 当聚焦时它会发光 到目前为止我看到的所有如何执行此操作的示例都基于外发光位图效果 http msdn microsoft com en us library ms752037 28v vs 90 29 aspx 而
  • 配置更改后通知DataSetChanged

    我正在更改设备配置 更改语言 方向等 后进行一些测试 我注意到在此之后 方法 notifyDataSetChanged 不起作用 动作示例 每次我执行删除 保存等操作时 我都会调用 updateList 当我更改方向或更改方向时 用户单击删
  • 值对象模式和数据传输模式之间的区别

    在什么场景下我可以在n层架构中使用这些设计模式 DTO 是您可以在以下位置使用的对象边界系统的 例如 当您有 SOAP Web 服务并且想要返回响应时 您可以使用 DTO 它比必须通过网络返回的实际 XML 更容易处理 DTO 通常由工具生
  • 如何在超时的情况下迭代异步迭代器?

    我觉得用代码更容易理解 try async for item in timeout something timeout 60 await do something useful item except asyncio futures Tim
  • 使用“dotnet build”输出作为“dotnetpublish”输入

    I use dotnet build o somedir 我该如何做后续dotnet publish使用中的工件 somedir 文档不充分 包含 MSBuild 逻辑的 xml 文件简直就是地狱 我什至试图把头撞到桌子上 但没有帮助 您可
  • 在数据库中存储长整型日期是 Java 最佳实践吗?

    我这样做的原因是 在任何数据库中存储为日期对象的日期往往以特定格式编写 这可能与您需要在前端向用户呈现的内容有很大不同 我还认为 如果您的应用程序从不同类型的数据存储中提取信息 这会特别有用 一个很好的例子是 MongoDB 和 SQL 日
  • 无法更新命令行工具,因为 Xcode 告诉我无权访问它们

    我正在使用 Xcode 4 3 2 它尝试安装命令行工具的更新 我点击了更新按钮 Xcode 告诉我 my apple id does not have access to Command Line Tools Contact Apple
  • 自定义布局,使其内容圆角

    我想创建一个通用的 ViewGroup 然后可以在 XML 布局中重用它来圆化放入其中的任何内容的角 因为某些原因canvas clipPath 似乎没有效果 我究竟做错了什么 这是Java代码 package rounded import
  • JUnit @Rule 生命周期与 @Before 交互

    我有一些 JUnit 测试使用TemporaryFolder Rule 他们使用TemporaryFolder in a Before执行一些设置的方法 Rule public TemporaryFolder folder new Temp
  • 使用 res.locals.user 在所有前端视图中显示用户对象

    我正在尝试使用res locals user显示user前端的对象 下面你可以在我的主要看到app js将我创建的中间件归档 const passport require passport const auth require routes
  • Delphi 中的泛型会导致性能瓶颈吗?

    最近我一直在开发一个应用程序 想要拥有多种类型的集合 我不想为其类型声明和实现新的集合类 因此 我考虑使用泛型 但不确定泛型与普通类型实例相比的性能 性能是我关注的主要因素 我的应用程序对时间要求很高 甚至损失几百毫秒也是不可取的 我使用的