我有一个文件的数千个标记,我用自定义注释突出显示。
然而,在我的eclipse项目中添加监听器后,我发现每次创建标记时,它都会刷新GUI,因此会调用我的监听器(IResourceChangeListener)。这意味着,我的听众被称为1000个标记1000次。到目前为止没有性能问题(不到2秒),但我认为如果我有10000个或更多标记,这种情况会有所不同。
是否可以批量创建所有这些标记,以便每次都不刷新GUI并且只调用一次我的监听器?
答案 0 :(得分:2)
您可以使用其中一个工作区修改类将更改批量更改为更少的事件。
WorkspaceJob
是Job
的扩展名,用于批量处理作业期间所做的更改。
WorkspaceModifyOperation
是一个IRunnableWithProgress
,您可以使用进度监视器对话框或支持可运行的任何内容运行,例如向导容器或IProgressService
。
答案 1 :(得分:1)
您可以使用org.eclipse.ui.actions.WorkspaceModifyOperation
来锁定"工作区。执行后,您只能获得一个ResourceDelta。
ProgressMonitorDialog pmdialog = new ProgressMonitorDialog(
activeShell);
pmdialog.run(true, true,new WorkspaceModifyOperation() {
@Override
protected void execute(IProgressMonitor monitor) throws CoreException,
InvocationTargetException, InterruptedException {
// create all my markers here
}
});