Eclipse plugin 工作空间作业的使用
我有一个eclipse插件,它有一些性能问题。查看progress视图时,有时会有多个作业在等待,从代码上看,它的大部分结构基于扩展Eclipse plugin 工作空间作业的使用,eclipse-plugin,eclipse-pde,Eclipse Plugin,Eclipse Pde,我有一个eclipse插件,它有一些性能问题。查看progress视图时,有时会有多个作业在等待,从代码上看,它的大部分结构基于扩展WorkspaceJobs的类,这些类与Guava EventBus事件混合在一起。当前的解决方案还涉及嵌套作业 我阅读了文档,了解了它们的用途,但我不明白为什么我要使用工作区作业,因为我可以从总线上发送事件时触发的方法运行syncexec/asynceec 例如,我可以创建一个事件来触发将要执行的作业1,而不是创建3个等待另一个的作业,然后当该方法完成时,它将发送
WorkspaceJobs
的类,这些类与Guava EventBus
事件混合在一起。当前的解决方案还涉及嵌套作业
我阅读了文档,了解了它们的用途,但我不明白为什么我要使用工作区作业,因为我可以从总线上发送事件时触发的方法运行syncexec/asynceec
例如,我可以创建一个事件来触发将要执行的作业1
,而不是创建3个等待另一个的作业,然后当该方法完成时,它将发送一个不同的事件类型,该事件类型将触发执行作业2
将要执行的操作的方法,依此类推
因此,不是:
WorkspaceJob Job1 = new WorkspaceJob("Job1");
Job1.schedule();
WorkspaceJob Job2 = new WorkspaceJob("Job2");
Job2.schedule();
WorkspaceJob Job1 = new WorkspaceJob("Job3");
Job3.schedule();
我可以使用:
@Subsribe
public replaceJob1(StartJob1Event event) {
//do what runInWorkspace() of Job1 would have done
com.something.getStaticEventBus().post(new Job1FinishedEvent());
}
@Subsribe
public replaceJob2(Job1FinishedEvent event) {
//do what `runInWorkspace()` of Job2 would have done
com.something.getStaticEventBus().post(new Job2FinishedEvent());
}
@Subsribe
public replaceJob3(Job2FinishedEvent event) {
//do what `runInWorkspace()` of Job3 would have done
com.something.getStaticEventBus().post(new Job3FinishedEvent());
}
我还没有尝试过,因为我尽可能简化了想法,问题比这复杂得多,但我认为EventBus
在性能方面会胜过工作空间作业
有人能证实我的想法或告诉我为什么我不应该尝试这个(除了我必须对我的事件有一个良好的体系结构之外)?工作空间作业会将资源更改事件延迟到作业完成。这将防止侦听资源更改的组件收到一半已完成的更改。这可能对您的应用程序很重要,也可能不重要
我不能评论Guava代码,因为我对它一无所知——但请注意,如果您的代码长时间运行,您必须确保它在后台线程中运行(WorkbenchJob就是这样做的) 我想补充一点,如果作业可以并行或顺序运行,则
getRule
会产生影响。您可能需要修改调度规则,以查看它们是否过于宽泛。如果我可以使应用程序响应,例如在打开文件时不挂起,那么我想我将用一个通知用户等待的消息框来交换工作空间作业。