1

我正在使用 Eclipse 4.3.2 Scala IDE 3.0.3,到目前为止一切都很好。但是最近我开始使用 Slick 2.0.1代码生成器,并且由于我的数据库中有一些非常重的表(最多 200 列),所以 Slick 代码生成器使用“HList 实现来克服 Scala 的元组大小限制”。

这会导致大量问题:

  1. 打开包含代码生成器生成的类的文件会使 Eclipse 冻结几分钟。
  2. 我经常得到eclipse Error in Scala compiler java.lang.StackOverflowError建议我关闭应用程序的时候......
  3. “内容辅助”崩溃并出现以下错误:

The 'Scala Completion Proposal Computer' proposal computer from the 'org-scala-ide.sdt.core' plug-in did not complete normally. Unable to instantiate the extension.

4.“更新发生注释”运行了很长时间

我猜所有这些问题都与内存有关(否则请告诉我),所以我尝试增加内存设置eclipse.ini

-Xss8M
-XX:MaxPermSize=1024m #this one seems to be irrelevant since I'm running Java 8
-Xms512m
-Xmx4096m

我还能做些什么来让我的工作流程变得可以忍受吗?

我的堆栈:

Scala 2.10.4 / Play Framework 2.2.2 / Java 8 / Ubuntu 13.10 64 位

更新:这是导致问题的文件:http: //pastebin.com/BDhhPHXB

到目前为止,我已经注意到这一点:每次打开文件/保存/编译/使用代码建议大约需要 70 秒。所以我猜这个文件的代码几乎是在涉及它的任何操作上针对编译器运行的?

4

1 回答 1

2

至于崩溃,我已经能够用您的代码准确地重现编译器堆栈溢出一次,并且我报告了一个错误:https ://issues.scala-lang.org/browse/SI-8477 增加 java 堆栈大小可能会有所帮助,但令人怀疑的是它只是偶尔发生。

关于冻结和编译时间:我研究了 Slick HLists 的编译时间,尽管它们在 Scala 2.10.4 中变得更好,但当我们达到数百个元素的大小时,它们似乎仍然很慢(实际上是指数级的)和你的表一样,有几百列。这可能是一个 Scala 编译器错误,或者可能只是有改进的余地,或者编译器可能什么也做不了。如果我们找到多种表达同一事物的方法并且其中一种比现有方法更快,那么 Slick 充其量可以解决这个问题,但这是猜测。我制作了一个最小化的代码示例并要求改进编译器:https ://issues.scala-lang.org/browse/SI-8478

更新:我们正在研究 Slick 的解决方法。还没完成。https://github.com/slick/slick/pull/749

于 2014-04-06T15:05:51.617 回答