IntelliJ处理大文件时非常缓慢。

11
我正在使用Guidewire Development Studio(基于IntelliJ的IDE),在处理大文本文件时(~1500行或以上)速度非常缓慢。我也尝试了使用社区版IntelliJ,但遇到了同样的问题。当我打开这些文件时,甚至在已经明显看到使用的内存仍然很多(1441 MB / 3959 MB)时,输入一个字符需要1秒钟的时间。如果我打开多个文件,它会迅速耗尽所有内存(我为IntelliJ分配了4GB)。Intellisense和其他自动化的东西也非常慢。我喜欢IntelliJ,但在这种情况下工作非常困难。有没有解决这个问题的方法?我想过一些替代方案,比如: 1. 在另一个编辑器上编辑大文件(例如Notepad ++),然后重新加载到IntelliJ中。 2. 打开另一个小文件,将你的一点代码复制到那里,进行编辑,然后再复制回来。它会有所帮助,因为智能感知和代码高亮功能得以保留,但是很麻烦。我关闭了所有不必要的插件,只保留了必要的插件,但是仍然没有得到改善。我还想知道是否可以在IntelliJ中"嵌入"一些外部编辑器,例如Notepad ++,Notepad2?我做了功课并在谷歌上搜索,但没有找到允许这样做的插件/配置。有经验的人可以给我一些建议,如何在IntelliJ中处理大文件(而不疯狂)吗?更新:通过我的研究,我了解到IntelliJ可能会因为非常大的文件(比如20MB左右)而崩溃。但是我的文件不是那么大,只有大约100KB-1MB,但它是非常长的文本。更新2:在Sajidkhan的建议下尝试增加堆内存后(我更改了idea64.vmoptions和idea.vmoptions两个文件),我发现IntelliJ没有接受这些更改。内存堆被固定在最大3GB。

另外,当系统仅使用约1GB堆内存时,可能会感知到较慢的性能,因此我认为问题与内存问题无关。


1
你为什么有那样大的文本文件呢?是源代码吗?可以将其重构成许多较小的文件吗?(一般性的问题;除非购买SSD,否则IO不太可能得到提高。) - Makoto
你应该使用Sublime Text 2或3。 - user177800
@Makoto:抱歉我离开了一会儿。是的,源代码可以重构,但这需要很长时间且风险很高。我们有一个即将到期的大项目,所以我更喜欢一个更简单的解决方案。 - Hoàng Long
@Sajidkhan:不,这不是重复的问题。据我所知,这个问题特定于编辑非常大的文件。其他任务在我的IDE上运行良好。 - Hoàng Long
@JarrodRoberson:可能是这样,但你能指点一下我如何在IntelliJ中快速编辑吗?我需要找到一种解决大文件问题的方法,但如果这意味着我需要在IntelliJ和其他IDE之间来回复制文件,那就不太理想了。 - Hoàng Long
当我运行jps -v时,内存使用的结果与我配置的不同:-Didea.platform.prefix=Studio -Xms3072m -Xmx4096m -XX:MaxPermSize=3584m。我想知道这是IntelliJ的限制吗? - Hoàng Long
3个回答

13

在绕了一段弯路之后,我找到了一个解决办法。

当我查看其他相似问题的答案时,我发现他们在文件大小至少几MB时开始遇到麻烦。这是没有道理的,因为我的文件只有几KB时就遇到了麻烦。经过更仔细的检查,我发现 Gosu 插件是罪魁祸首:在我将我的Gosu文件标记为“仅文本”后,速度恢复正常。

所以我猜问题与代码突出显示和语法提醒有关。目前,我解决这个问题的最佳方法是:

  1. 右键单击文件并将其标记为纯文本。
  2. 关闭文件,然后再次打开并进行编辑。

注意:由于这适用于Guidewire开发套件中的所有文件类型,您可能需要永久地将某些长文件标记为纯文本,特别是*.属性文件(也称为i18n /国际化文件)。代码自动补全的好处并不值得麻烦。


1
这对我也奏效了,这是可以预料的。对于一个拥有18k行代码文件进行语法高亮是不可能的(我诅咒那个创造这个文件的家伙)... - fgblomqvist
另外,他们应该想办法检测并跳过高度压缩和混淆的文件来避免突出显示。 - the Hutt

4

你可以尝试编辑bin文件夹中的idea64.vmoptions。你可以将最大堆和最大PermGen设置为更高的值。

别忘了重新启动!


2
请确保运行64位的启动脚本/可执行文件,否则此操作将无效! - user177800
1
@Sajidkhan:抱歉我不能一直在这里。我得检查是否有其他事情被忽略了。 - Hoàng Long
这是我的当前配置,我认为它们都相当高: -Xms512m -Xmx2048m -XX:MaxPermSize=350m -XX:ReservedCodeCacheSize=96m -XX:+UseCodeCacheFlushing -ea -Dsun.io.useCanonCaches=false -Djava.net.preferIPv4Stack=true - Hoàng Long
尝试将其更改为: -Xms128m -Xmx8192m -XX:MaxPermSize=1024m 别忘了重新启动。 - happyvirus
@Sajidkhan:抱歉,我没有注意到2小时前已经有答案了。可能是我的眼睛有问题...我相信我只看到了评论(之前只有一段时间没有答案)。 - Hoàng Long
显示剩余2条评论

2

在我看来,这不是IDE的错误。问题在于使用了大型源文件。无论如何,它们更加复杂,难以测试和维护,因此如果可能的话最好将它们拆分。 - Serge Ballesta
感谢您的努力。如上所示,这很可能是由于语法高亮引起的。关闭语法高亮(将它们视为普通文本文件)将有所帮助。 - Hoàng Long
@SergeBallesta:我希望那时可能是可行的。虽然有时我们没有选择(比如有一个很长的i18n文件)。 - Hoàng Long
1
@Serge Ballesta,我同意你的观点,但有时候你不得不处理这样的代码。 - DoctorP
1
关闭语法高亮确实有所帮助,但效果不太明显。 - DoctorP
另一个建议。不要运行64位版本(除非您的项目非常大)。32位版本运行更快,占用更少的内存。希望这些都能帮到您。 - DoctorP

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接