【问题标题】:How many allocations does Regex.Matches() internally do?Regex.Matches() 在内部做了多少分配?
【发布时间】:2016-09-25 20:19:08
【问题描述】:

我需要最小化包含对Regex.Matches() 的多次调用的文本处理内部循环中的内存分配数量。所以,问题是,给定文本长度(以字符为单位)t、正则表达式模式长度(以字符为单位)r 和匹配数m,@987654327 分配的内存的大致数量是多少@,这些分配的大小是多少?这些是否受到任何Regex 选项的影响?

我尝试过查看Regexsource code 及其相关类,但由于它们的复杂性而受阻。也没有在网上找到很多与Regex.Matches() 的内存使用相关的文档。于是就有了这个问题。

【问题讨论】:

  • 正则表达式有点像 FSM,因此它不应该占用比存储它所需的内存(可能是哈希表?)更多的空间,并且可能需要一些额外的空间用于回溯。所以它会受到设置和实际正则表达式的影响(正则表达式的长度与它无关,它的复杂性和某些功能使用确实如此),匹配的数量应该无关紧要(除了我猜的实际结果)。尝试过任何分析吗?
  • 我已经理解了这个概念;实施就是问题所在。

标签: .net regex memory allocation


【解决方案1】:

获取像JetBrains dotMemory 这样的内存分析器,使用正则表达式分析一个简单的应用程序,然后查看由 Regex.Matches 或您感兴趣的其他方法生成的memory traffic。这是学习如何使用的最简单和最准确的方法许多分配确实 Regex.Matches()。 嵌入到 Visual Studio 的内存分析器不显示有关内存流量的信息,AFAIK,其他商业分析器应该这样做。

【讨论】:

    猜你喜欢
    • 2012-08-28
    • 2011-01-03
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    • 2017-01-30
    • 1970-01-01
    • 1970-01-01
    • 2015-07-14
    相关资源
    最近更新 更多