使用TornadoFX时,TableView列的建立如下:
tableview(list<ObjectType>) {
column("ColumnName", ObjectType::property)
...
}
通常这很好,但是在我的情况下,我使用的是Kotlin暴露实体,该实体使用对另一个实体的引用。发生这种情况时,如果要使用该引用,则必须将其包含在事务中。
示例:
val company = transaction { employeeObject.companyObject }
如果您没有在事务中包装这样的呼叫,则会引发错误。似乎没有明显的方法可以覆盖列访问属性的方式,所以我想知道它是否存在。
现在,我已经尝试将我的实体包装到另一个类中,该类将预先处理所有必需的事务,但是当需要映射的实体数量达到数千时,这会使我的程序基本上进入静止不动。如果需要,我可以返回以前的样子,它没有引用,而只是给其他实体的普通旧ID号。然后,该列的单元格格式将尝试使该公司与之前获取的列表中的所有公司匹配。不过,我不太喜欢这种解决方案,它看起来丑陋且不太优雅,但比映射实体快得多。我尝试实现的目标也有可能也会导致其自身的速度变慢。我只想知道这是否可行,所以我至少可以看看它有多快。
答案 0 :(得分:0)
感谢Edvin提醒我,列在UI线程上起作用,它不应该繁重!我尝试了其他一些与映射有关的事情,希望阻塞点是我正在执行的事务量,但这对速度没有帮助。因此,我认为让View预先检索所有公司的列表,然后让我的专栏在该列表中找到公司。没有那么漂亮,但没有减速!
但是要正式回答我自己的问题:没关系,不要在UI线程中尝试。这是不好的做法,会降低性能。