如果你是解析的话,就说HTML吧,一旦你读懂了元素名,是否有利于实习呢?这里的逻辑是这个解析器会一遍又一遍地解析相同的字符串(元素名称)?并且将解析多个文档。
理论:
// elemName is checked for null.
MarkupNode node = new MarkupNode()
{
Name = String.IsInterned(elemName) ? elemName : String.Intern(elemName),
...
};
这个问题是由问题 string-interning-memory 激发的.
最佳答案
我真的不能确切地说这是否有助于您的表现。这将取决于您使用了多少个字符串,以及您创建这些字符串实例的频率。驻留通常是自动完成的,因此显式检查字符串是否已驻留实际上可能会增加开销并降低性能。在内存使用方面,interned strings 绝对可以使用更少的内存。
如果你确实希望使用字符串实习,有一些更好的方法来实现它。首先,我会将您的元素名称放在一个充满公共(public)字符串常量的静态类中。在您的程序源代码中找到的任何字符串文字肯定会自动保留。当您的应用程序加载时,此类字符串会加载到实习生池中。如果您的字符串不能定义为编译时实习生准备的常量,那么我会简单地调用 String.Intern(...) 而不是执行完整的三元表达式 String.IsInterned( ...)? ...:String.Intern(...)。 Intern 方法将自动检查字符串是否为 interned,如果是则返回 interned 版本,否则会将字符串添加到 intern 池并返回它,如果不是。无需自己手动检查 IsInterned。
同样,我不能说手动驻留字符串是否会提高性能。如果您使用常量,它们将以最佳方式自动为您驻留,这是提高定期重用字符串的性能和内存使用的最佳方法。老实说,我建议您远离手动实习,让编译器和运行时为您处理优化。
关于c# - 实习字符串是否有助于解析器的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1356341/