字符串到字节[delphi]

use*_*ser 3 delphi byte

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

Run*_*ner 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);
Run Code Online (Sandbox Code Playgroud)

但正如已经说过的,这不会挽救你的记忆.它的使用量几乎相同.你不会从中获益.如果你需要很多字符串采取不同的方法.喜欢这个选择列表中的内容:

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

如果不了解更多问题,很难提供进一步的帮助.

编辑:

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

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