How do I prevent builds between multiple changes to the workspace?
Every time resources in the workspace change, a resource change notification is broadcast, and autobuild gets a chance to run. This can become very costly if you are making several changes in succession to the workspace. To avoid these extra builds and notifications, it is very important that you batch all of your workspace changes into a single workspace operation. It is easy to accidentally cause extra builds if you aren’t very careful about batching your changes. For example, even creating and modifying attributes on IMarker objects will cause separate resource change events if they are not batched.
Two different mechanisms are available for batching changes. To run a series of changes in the current thread, use IWorkspaceRunnable. Here is an example of a workspace runnable that creates two folders:
final IFolder folder1 = ..., folder2 = ...; workspace.run(new IWorkspaceRunnable() { public void run(IProgressMonitor monitor) { folder1.create(IResource.NONE, true, null); folder2.create(IResource.NONE, true, null); } }, null);
final IFolder folder1 = ..., folder2 = ...; Job job = new WorkspaceJob("Creating folders") { public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException { folder1.create(IResource.NONE, true, null); folder2.create(IResource.NONE, true, null); return Status.OK_STATUS; } }; job.schedule();