【问题标题】:How to use Header files in Dart如何在 Dart 中使用头文件
【发布时间】:2021-12-26 17:10:01
【问题描述】:

我有一个大约 10 万个具有这种格式的条目的列表:

final codes = <Results>[Results('ccc857'),
Results('dea105'),
Results('fad975'),
Results('abf307'),
Results('faf995'),...(continuing for 100K lines)

如果我将这些直接放入 main.dart android studio 就会挂起。

我想把它作为头文件 abc.h 但我不知道 Dart 等价物。

谢谢。

【问题讨论】:

    标签: dart precompiled-headers


    【解决方案1】:

    Dart 没有任何头文件的概念。

    您要求创建 100K 个对象,每个对象包含 ~1 个字符串。编译器还需要 100K 节点来表示该源代码,所以这是很多对象。还有很多代码(您的程序将包含对 Result 构造函数的 100K 不同调用的代码)。

    考虑改为:

    final codes = _createCodes();
    static List<Result> _createCodes() {
      const strings = ["dea105", "fad975", "abf307", "faf995",
      "......", .... 
      "......"];
      return [for (var string in strings) Result(string)];
    }
    

    也就是说,不要将整个表达式重复 100K 次,使用循环, 并且只有迭代之间不同的部分作为单独的代码。 这应该减少超大代码的开销。

    没有保证它不会挂起,具有 100K 元素列表文字。 考虑是否可以在运行时从文件中加载这些字符串。 或者也许将它们放入一个字符串文字中:

    final codes = _createCodes();
    static List<Result> _createCodes() {
      const strings = "dea105fad975abf307faf995...."
      "...........",  
      ...
      ".......,...";
      return [for (var i = 0; i < strings.length; i++) 
          Result(strings.substring(i, i + 6))
      ];
    }
    

    (这确实在运行时创建了大量的字符串,但在编译时只创建了一个。一个 600K 字符的字符串文字。这可能有其自身的问题。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多