这是一个场景:我最近的任务是为我们现有的应用程序编写一个rs232串行设备通信接口。此应用程序具有基本类来进行实际通信。基本上我所做的就是接受一个字节数组进入我的类,然后处理它。
部分问题是,一次传递的字节数组不能超过1000个字节,但可能有更多数据等待进入属于该事务的数据。所以我不知道交付给我的是完整的。我正在做的是将1000字节数组转换为字符串并将其填充到缓冲区中。然后,此缓冲区运行正则表达式以查看添加的内容是否创建完整的事务。我知道如果它匹配特定的签名(在开头和结尾基本上是一系列控制代码),它就完整了。如果在垃圾数据进入并且无法匹配的情况下没有找到匹配,则此缓冲区将仅在放弃之前附加数据最多3次。这不是一个高数据量的设备,所以我不希望大量的数据不断涌入。而正则表达式最多只能执行3000个字符。
到目前为止,它的效果非常好,但我的问题是正则表达式可怕吗?对于我正在使用它们的性能,是否有任何后果?我的理解是正则表达式通常对大量数据不好,但我觉得这很小。
答案 0 :(得分:5)
是正则表达式吗?
相反,正则表达式非常适合匹配数据序列中的模式。
对于我正在使用它们的性能,是否有任何后果?
正则表达式可以用非常低效的方式编写,但这通常是特定正则表达式的问题,而不是正则表达式作为一种技术。
我的理解是正则表达式通常对大量数据不好,但我觉得这很小。
没有“大”和“小”的通用定义。根据正则表达式引擎,您的表达式通常会转换为表达式描述的状态机。这些机器在它们的工作中非常有效,在这种情况下,数据块的大小可能非常大。另一方面,人们可以编写一个带有大量回溯的正则表达式,即使在100个字符或更少字符的输入字符串上也会导致不可接受的性能。
答案 1 :(得分:3)
你正在做的事情就是提出任何危险信号。
要记住的一些事情
不要因性能而吸引自己。只需先设计您的程序,然后优化性能,并且只有在遇到性能问题时才这样做。
某些任务不适合正则表达式。正则表达式无法很好地解析XML,并且它们也无法解析 X n Y n 等模式而不知道具体是什么我试图与你的正则表达式匹配,我无法真正分析它是否适合你的问题。请注意,您没有任何奇怪的边缘情况。
正则表达式对大量数据不利并不是我以前听过的,而且我一直在网上寻找它,我仍然没有发现很多警告。
通常,最简单的解决方案是最好的解决方案。如果你能想到一个更直接,更简单的问题解决方案,那就继续吧。如果没有,那就不要太担心。