我正在与一个团队一起开发一个使用Delphi 2007的大型应用程序。它使用一个更大的遗留框架来访问数据。应用程序和框架都使用String作为字符串的数据类型。我已经开始修改框架中的代码以支持Delphi 2009字符串,有关此问题请参见我的先前的问题。
现在我看到了两个选择:
选项1 - 继续像以前一样使用String。这可能是最干净的解决方案,因为框架将支持Unicode。但是,框架中的代码必须进行大量修改才能使其正常工作。这需要深入了解框架内部算法。这也会有更大的机会引入新的错误。
选项2 - 将String替换为AnsiString,将Char替换为AnsiChar。这可能是一个更容易的解决方案,也是我开始修改代码的方式(但后来我开始思考并提出了这个问题...)。这种方法的负面影响是不支持Unicode。虽然Unicode支持不是必需的,因为之前它可以工作,但是它很好用。它在未来也可能很有用。另一个问题是应用程序必须像以前一样在方法的参数中发送Ansistring变量,而不是String。有数千个调用需要更改...
所以我现在不知道该怎么办了。两个选项都需要大量的工作,但是选项1可能更具风险,耗时更长。我想从这个论坛中得到反馈和评论,因为我猜我不是第一个遇到这个问题的人。
编辑 另一个问题是内存占用。我编写了一个快速测试,分配了一个包含一百万个字符串的数组。每个字符串都填充了从A到Z的26个字符。
使用Delphi 2007,它占用了40,011,600字节,时间为4:15分钟。 使用Delphi 2009,它占用了72,015,580字节,时间为4:45分钟。
内存消耗是通过GetHeapStatus.TotalAllocated来测量的。
我认为我们不能承受字符串分配两倍的内存。
现在每个客户端的内存消耗通常达到500 MB,其中很多是字符串。我们尽可能使用AnsiString。
谢谢!