【发布时间】:2023-03-07 08:19:01
【问题描述】:
我的应用程序需要解析一些大字符串数据。这意味着我大量使用字符串类的 Split、IndexOf 和 SubString 方法。我正在尝试在必须进行任何连接的任何地方使用 StringBuilder 类。但是,当应用程序执行此解析时,应用程序 cpu 使用率会很高(60-70%)。我猜想调用这些字符串 API 是导致 CPU 使用率升高的原因,特别是数据的大小很大(字符串的典型长度为 400K)。有什么想法可以验证是什么导致 cpu 使用率如此之高,以及是否有任何关于如何降低 cpu 使用率的建议?
【问题讨论】:
-
您没有具体说明为什么高 CPU 使用率是一件坏事。您是否试图为其他进程/线程留出足够的“喘息空间”?
-
分析它并寻找瓶颈。确定不是 IO 操作(读/写磁盘)引起的吗?
-
@Vlad。一般来说,您不希望控制 cpu 的使用吗?当高 CPU 使用率被认为是一件好事?
-
字符串解析总是产生 100% 的 cpu 使用率,你要求它做真正的工作。找出您损失 40-30% 的原因应该是您关心的问题。可能是 I/O,读/写文件数据。您对此无能为力,但在另一个线程中执行此操作以便您可以将其与解析重叠会有所帮助。很难达到 100%。
-
@palm-snow 定义“在控制之下”。它以 100% 运行的事实意味着它不必等待内存和/或 I/O。因此,这意味着它现在正在执行您要求它执行的操作,而不是稍后执行。我认为这是一件好事。就像@Hans Passant 提到的,实现 100% 通常是一个目标,而不是问题。