Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Eclipse plugin 工作空间作业的使用_Eclipse Plugin_Eclipse Pde - Fatal编程技术网

Eclipse plugin 工作空间作业的使用

Eclipse plugin 工作空间作业的使用,eclipse-plugin,eclipse-pde,Eclipse Plugin,Eclipse Pde,我有一个eclipse插件,它有一些性能问题。查看progress视图时,有时会有多个作业在等待,从代码上看,它的大部分结构基于扩展WorkspaceJobs的类,这些类与Guava EventBus事件混合在一起。当前的解决方案还涉及嵌套作业 我阅读了文档,了解了它们的用途,但我不明白为什么我要使用工作区作业,因为我可以从总线上发送事件时触发的方法运行syncexec/asynceec 例如,我可以创建一个事件来触发将要执行的作业1,而不是创建3个等待另一个的作业,然后当该方法完成时,它将发送

我有一个eclipse插件,它有一些性能问题。查看progress视图时,有时会有多个作业在等待,从代码上看,它的大部分结构基于扩展
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
会产生影响。您可能需要修改调度规则,以查看它们是否过于宽泛。如果我可以使应用程序响应,例如在打开文件时不挂起,那么我想我将用一个通知用户等待的消息框来交换
工作空间作业。