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 中的泛型会导致性能瓶颈吗? 的相关文章

  • 对于大型简单数据库,SQLite 和 DISQLite 有何比较?

    两者有什么区别SQLite http www sqlite org and DISQLite http www yunqa de delphi doku php products sqlite3 index为什么我要选择其中一个而不是另一个
  • Java 泛型与类和接口 - 一起

    我想要一个 Class 对象 但我想强制它代表的任何类扩展类 A 并实现接口 B 我可以 Class
  • 如何修复这个 delphi 7 编译错误 - “重复资源”

    我正在尝试编译我继承的 Delphi 7 项目 但收到此错误 错误 警告 重复资源 错误 类型 2 位图 ID 编辑 错误 文件 C 路径缩短 common CRGrid res 资源已保留 文件 c common raptree RES
  • 如何使用通配符模拟泛型方法的行为

    我正在使用 EasyMock 3 2 我想基于 Spring Security 为我的部分安全系统编写一个测试 我想嘲笑Authentication http docs spring io autorepo docs spring secu
  • 如何在 ASP.NET Core 中注入泛型的依赖关系

    我有以下存储库类 public class TestRepository Repository
  • TypeScript - 如何从方法的参数推断类泛型类型?

    我正在尝试从稍后调用的方法参数中输入类泛型 在我们调用带有泛型参数的方法之前 类的泛型类型是不知道的 然后 对于任何其他方法 将传递泛型类型 老实说 对我来说 这似乎是一个非常复杂的功能 我什至不确定 TypeScript 是否有办法做到这
  • 使用远程数据编写 Android、iPad、iPhone 客户端的技术

    我需要探索世界 你写了一个杀手级应用程序 但你有 Android iPhone iPad 客户端吗 我的问题是 1 向这些设备发送数据的最佳方式是什么 按照建议进行肥皂和休息here https stackoverflow com ques
  • 德尔福和Doxygen

    我想使用 doxygen pas2dox 记录我的源代码 当我设置好所有内容 包括过滤器和提取选项 提取所有内容 时 doxygen 运行良好 但生成的文档仅包含源文件作为链接 并且没有提取类型 方法 过滤后的源看起来不错 有任何提示如何定
  • Android中如何检测程序的终止?

    当 Windows 程序终止时 它会调用事件处理程序 例如 OnClose OnDestroy 和析构函数 Destroy 当我想保存一些 INI 设置时 这些地方就是我要保存的地方 我为所有这些事件编写了事件处理程序 但当我终止程序时它们
  • Delphi 应用程序被 Google Chrome 视为“危险”

    我经常用Delphi 2009制作数学软件 并将其发布在我的网站上 然而 去年左右 Google Chrome 开始认为我的一小部分 但数量不断增加 EXE 是 有害的 并且 Google Chrome 拒绝下载它们 例如 今天我编写了一个
  • 从泛型类继承时需要 T 的列表或枚举器的建议

    我知道答案并不简单 而且我已经使用了一些 我认为丑陋的 木棍 我只是在寻找一些优雅的答案 抽象类 public interface IOtherObjects public abstract class MyObjects
  • 在单个 C# 泛型方法中返回可为 null 和 null?

    C 泛型方法是否可以返回对象类型或 Nullable 类型 例如 如果我有一个安全的索引访问器List我想返回一个值 稍后我可以使用以下任一方法检查该值 null or HasValue 目前我有以下两种方法 static T SafeGe
  • 如何从窗体单元外部访问delphi控件?

    我试图从如下定义的过程中调用计时器的 Enabled 属性 procedure Slide Form TForm Show Boolean 并且没有固定的形式名称 例如 Form2 Timer 将表单的单位放入使用列表后 这可以工作 For
  • 从不同的形式调用过程

    我正在使用 Lazarus 我有一个名为TForm1单元名称为 Unit 1 在这里我有一个名为mergeDATfile a shortint 这会产生一些东西 顺便说一句 我必须创建另一个名为TForm2里面有按钮 Button1 当它被
  • 使用泛型进行选择排序

    我对整数进行了选择排序并且它正在工作 当我尝试修改程序以使用泛型时 编译器会抱怨 我不知道如何修复它 如果有人能提出一些建议和建设性意见 我将不胜感激 这是代码 public class SelelctionSort public stat
  • 如何使用 IdTCPClient 等待来自服务器的字符串?

    我的 IdTelnet indy 10 1 有问题 我无法以 Unicode 模式从服务器读取数据 现在我想用 IdTCPClient 编写 telnet 终端 服务器有时发送一行 有时发送越来越多的行 但发送之间没有固定的时间 现在我的问
  • Spring 如何在运行时获取有关“强类型集合”的泛型类型信息?

    我在 Spring 3 0 文档中阅读了以下内容 强类型集合 仅限 Java 5 在 Java 5 及更高版本中 您可以使用强类型集合 使用泛型类型 也就是说 可以声明一个 Collection 类型 使其只能包含 String 元素 例如
  • 在该对象调用的事件期间销毁该对象

    我有一个按钮 它的 OnClick 事件调用一个销毁按钮的过程 但随后 线程 想要返回到 OnClick 事件 并且我遇到了访问冲突 我完全被难住了 您需要在按钮的所有代码执行完毕后销毁该按钮 执行此操作的标准方法是将用户定义的消息发布到表
  • 指针^ 与 s[1]

    在读取数据的函数中 数据含义只字符串 从磁盘 我应该更喜欢哪个 哪个更好 A DiskStream Read Pointer s Count or B DiskStream Read s 1 Count Note 我知道两者都有相同的结果
  • 在 tlistbox 中绘制缩略图

    在 DelphiXE 中 我使用 tFileOpenDialog 选择一个文件夹 然后在 tListBox 中列出该文件夹中的所有 jpg 文件 我允许将列表项拖放到列表中进行自定义排序 以便稍后按顺序显示它们 我希望能够在文件名旁边绘制图

随机推荐

  • 如何使用云功能从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 中的泛型会导致性能瓶颈吗?

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