【发布时间】:2011-01-08 18:59:03
【问题描述】:
我正在与一个使用 Delphi 2007 的更大应用程序的团队合作。它使用更大的遗留框架来访问数据。应用程序和框架都使用 String 作为字符串的数据类型。我已经开始修改框架中的代码以支持 Delphi 2009 字符串,请参阅我之前的问题。
我现在看到 2 个替代方案:
Alt 1 - 像以前一样继续使用字符串。这可能是最简洁的解决方案,因为框架随后将支持 Unicode。但是必须对框架中的代码进行大量修改才能使其正常工作。这需要深入了解框架中的内部算法。这也是引入新错误的更大机会。
Alt 2 - 用 AnsiString 替换 String 和用 AnsiChar 替换 Char。这可能是一个更简单的解决方案,也是我开始修改代码的方式(但后来我开始思考并提出这个问题......)。不利的一面是不支持 Unicode。 Unicode 支持不是必需的,因为它以前工作过,但很高兴拥有。它在未来也可能有用。另一个问题是应用程序必须在框架的方法中将 Ansistring 变量作为参数发送,而不是像以前那样发送 String。有成千上万的呼吁改变......
所以我现在不知道。这两个选项都需要大量工作,但替代 1 可能更具风险和耗时。我想从这个论坛得到反馈和 cmet,因为我想我不是第一个遇到这个问题的人。
编辑 另一个问题是内存占用。我写了一个快速测试,分配了一百万个字符串的数组。每个字符串用从 A 到 Z 的 26 个字符填充。
使用 Delphi 2007 需要 40.011.600 字节,时间为 4:15 分钟。 使用 Delphi 2009 需要 72.015.580 字节,时间为 4:45 分钟。
使用 GetHeapStatus.TotalAllocated 测量内存消耗。
我认为我们不能让字符串分配两倍的内存。
现在每个客户端有 500 MB 的内存消耗并不罕见。我猜这大部分都是字符串。想必我们尽量使用 AnsiString。
问候
【问题讨论】:
-
大家都很感兴趣,谢谢!显然,选择什么并不明显。我对 Alt 2 感觉更多,但 Andreas 的评论让我担心。如果 Pos 返回错误的索引,它可能会引入新的错误。
-
查看我的回答中的编辑:“链接到 CodeRage 4 上的 Unicode 会话并解释 Andreas 所描述的情况”。
标签: delphi unicode migration delphi-2009 delphi-2007