字符串到字节[delphi]

时间:2010-12-31 02:54:50

标签: delphi byte

我需要将数据存储到内存中。我的数据类型数据是字符串。我想最小化内存使用量。我想我必须将字符串更改为字节。我对吗?如果我将字符串转换为字节,这意味着我必须将字符串转换为TMemoryStream?

3 个答案:

答案 0 :(得分:5)

如果你真的想转换它,那么这段代码将完成它

var
  BinarySize: Integer;
  InputString: string;
  StringAsBytes: array of Byte;
begin
  BinarySize := (Length(InputString) + 1) * SizeOf(Char);
  SetLength(StringAsBytes, BinarySize);
  Move(InputString[1], StringAsBytes[0], BinarySize);

但如前所述,这不会为你节省记忆。它的使用量几乎相同。你不会从中获益。如果你需要很多字符串采取不同的方法。喜欢这个选择列表中的内容:

  1. 使用字典,只存储一次相同的字符串
  2. 只保留内存中所有字符串的一部分。某种缓存。让其他人使用硬盘并使用流加载它们
  3. 如果您有非常大的字符串,请考虑压缩它们。
  4. 如果您正在从文件中读取并且您的目标是二进制数据,请跳过中间的字符串。将源直接读入字节缓冲区。
  5. 如果不了解更多问题,很难提供进一步的帮助。

    修改

    如果您真的想要最小的内存占用率并且速度稍慢(但仍然非常快),则可以使用Suffix TrieB-Tree或简单Binary Tree事件。它们可以直接从硬盘驱动器工作,并且可以非常快速地进行搜索。如果然后将数据的子集缓存到RAM,则可以获得最佳的解决方案内存与速度。

    无论如何,鉴于您声称拥有大量数据,似乎根本不需要内存优化。 22MB的RAM几乎不是问题,不值得优化。

答案 1 :(得分:1)

您确定这是需要的优化吗?

长度为10个字符的2000行只有20000个字符。

在大多数环境中,这很小。大多数机器都拥有相当多的RAM。大多数磁盘都比这大得多。而且,通常情况下,在网络上发送和接收这么多信息是微不足道的。

也许你的情况很独特。也许你有大量的20000个字符数据集,或者传输这个日期的网页访问速度非常慢等等。但是,我鼓励你考虑一下,即使你是非常好的,也许你不想尝试优化它们。成功实施,不会显着改变您的应用程序在现实世界中的表现。

答案 2 :(得分:0)

使您的存储类型为tutf8string。它可以简单地从tunicodestring分配,转换应该是安全的。