Bug 47394 Significant performance degradation in 3.x builds
I am currently using M5 we have a fairly large project approx 7000 source files split into about 250 packages plus about 20 jar files containing about 3MB of code. I am running on windows NT Service pack 6 with a 2Ghz processor and 1GB of RAM with vm params =-Xmx640m -Xms640m. Eclipse is running using JDK1.4.2_02. The problem I am facing is that build performance seems to have drastically slowed down in the 3.x builds compared to a 2.1 build. The entire UI and the machine seems to come to a stop when a build is occurring or when updating from a cvs sync. Keeping the progress view open I notice that there seems to be (too frequently) updates to the decorations during a build and the decoration update seems to take a very long time before the next task becomes active in the progress view. I notice that this also occurs when doing long operations like organize imports on an entire source tree. Maybe the decoration update could be delayed till the long operation is complete. The package explorer also seems to have slowed down. I have a package with about 80 sub packages each of which have 4 sub packages themselves. Just clicking on the expand of the package node of this package takes more than 35 secs.
org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetFilterActionGroup.java
* Sets this filter's working set.
	 * 
	 * @param workingSet the working set
	 * @param refreshViewer Indiactes if the viewer should be refreshed.
	 */
	public void setWorkingSet(IWorkingSet workingSet, boolean refreshViewer){
		
		fClearWorkingSetAction.setEnabled(workingSet != null);
		fEditWorkingSetAction.setEnabled(workingSet != null);
		fWorkingSet= workingSet;
		
		if (fWorkingSetFilter != null) {
			fWorkingSetFilter.setWorkingSet(workingSet);	
			if (refreshViewer) {
				fViewer.getControl().setRedraw(false);
				fViewer.refresh();
				fViewer.getControl().setRedraw(true);
			}
			if (fTitleUpdater != null)
				fTitleUpdater.propertyChange(new PropertyChangeEvent(this, IWorkingSetManager.CHANGE_WORKING_SET_NAME_CHANGE, null, workingSet));
		}
	}
	
	/**
	 * Saves the state of the filter actions in a memento.
	 */
	public void saveState(IMemento memento) {
		String workingSetName= ""; 
		if (fWorkingSet != null)
			workingSetName= fWorkingSet.getName();