【问题标题】:How to solve RTTI size issue for large Enum types in Delphi XE?如何解决 Delphi XE 中大型枚举类型的 RTTI 大小问题?
【发布时间】:2011-07-15 13:43:39
【问题描述】:

当我尝试在 Delphi XE 中编译具有 5000+ 值的 Enum 类型的单元时出现此错误

[DCC 错误] uCities.pas(5834):“TCity”的 E2575 RTTI 太大;使用 $RTTI 缩小范围或减小类型大小

我该如何解决这个问题?

类似的东西

{$WEAKLINKRTTI ON}
{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}

没有帮助。

提前致谢

【问题讨论】:

  • 我目前手头没有Delphi XE,但我在Delphi 2010中成功编译了10000个值的枚举。
  • 这看起来像你在硬编码可能是一个相当可观的查找表(数据库)。

标签: delphi enumeration delphi-xe rtti


【解决方案1】:

您正在使用枚举来列出城市 ???这是新的。

使用查找数据结构比使用枚举更好。

编辑:例如,您可以使用 TClientDataset,或者如果您进行任何类型的查找(从 TCity 值获取城市的字符串名称),您可以使用 TDictionary(来自 Generics.Collections 单元)。

并帮助这里的人帮助您: TCidade 对不懂葡萄牙语的人没有任何意义,但使用TCity,人们可以更好地了解您的问题是什么.

【讨论】:

    【解决方案2】:

    具有 5000+ 个值的 Enum 类型不是您手动编写的 Enum。现在有 5k 个值的 Enum 明天将有 10k 个值。

    您应该修改生成枚举的代码以生成简单的常量。使用 Integer(或 Smallint)作为实际类型。这应该可以解决它。

    【讨论】:

    • 他正在使用枚举来列出城市。翻译成英文的枚举名称是TCity
    【解决方案3】:

    根据 Mason Wheeler,重构类以减小字体大小。把它分成几个更小的。

    来源:Embarcadero forums

    编辑:仔细阅读,这可能会很棘手,因为您正在处理一个枚举。一种选择可能是将枚举值转换为整数常量(Const 关键字)并更改过程以使用整数。

    【讨论】:

    • 哇,我现在被引用为 RTTI 生成的权威?
    • @Mason - 这是一个很好的答案。 :) 不管怎样,剩下多少 Delphi RTTI 专家?
    【解决方案4】:

    如果枚举中的 5k 个条目是合理的,无需讨论 - 快速解决方法是将 =1 添加到您的第一个枚举项。

    TCharsetChar= ( csSPACE=1, csEXCLAMATION_MARK, csQUOTATION_MARK, ...

    有时为了节省时间或提高性能,打破规则是值得的。所以你来了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-17
      • 1970-01-01
      • 1970-01-01
      • 2011-06-20
      • 2016-02-27
      • 1970-01-01
      • 2011-01-09
      相关资源
      最近更新 更多