2016-09-25 30 views
0

我需要最大限度地减少文本处理内部循环中的内存分配数,其中包含多个对Regex.Matches()的调用。因此,给定文本长度(字符数)tr的正则表达式模式长度(以字符为单位)和匹配数mRegex.Matches()作出的内存分配的近似数量是多少,以及这些分配?这些是否受到Regex选项中的任何影响?Regex.Matches()在内部执行多少次分配?

我已经尝试过Regex及其相关类的source code,但它们的复杂性受到阻碍。也没有在网络上找到有关Regex.Matches()的内存使用情况的大量文档。因此,这个问题。像JetBrains dotMemory

+0

正则表达式就像一个有限状态机,所以它不应该占用比内存更多的空间(可能是一个哈希表?)它需要存储它,并可能有一些额外的空间用于回溯。所以它会受到设置和实际正则表达式的影响(正则表达式的长度与它无关,它的复杂性和某些特性的用法),匹配的数量应该没有关系(除了我猜测的实际结果之外)。试过任何配置文件了吗? – MarZab

+0

我已经理解了这个概念;实施就是问题所在。 – bright

回答

1

获取内存设置,使用正则表达式简介简单的应用程序,看看你所中insterested Regex.Matches或其他方法所产生的memory traffic,这是最简单和最准确的方法来了解有多少呢分配Regex.Matches()。 内嵌到Visual Studio的内存分析器不显示有关内存流量的信息,AFAIK,其他商业分析工具应该这样做。