1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-26 18:35:32 +02:00

[420798] Slow performances in RDz 9.0 with opening 7000 files located on

a network driver.
This commit is contained in:
Dave McKnight 2014-01-16 12:15:24 -05:00
parent 4dae6e06f6
commit 58064dbe0e
5 changed files with 79 additions and 27 deletions

View file

@ -1,5 +1,5 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2002, 2013 IBM Corporation and others. * Copyright (c) 2002, 2014 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
@ -81,6 +81,7 @@
* David Mcknight (IBM) - [374681] Incorrect number of children on the properties page of a directory * David Mcknight (IBM) - [374681] Incorrect number of children on the properties page of a directory
* Samuel Wu (IBM) - [398988] [ftp] FTP Only support to zVM * Samuel Wu (IBM) - [398988] [ftp] FTP Only support to zVM
* Xuan Chen (IBM) - [399101] RSE edit actions on local files that map to actually workspace resources should not use temp files * Xuan Chen (IBM) - [399101] RSE edit actions on local files that map to actually workspace resources should not use temp files
* David McKnight (IBM) - [420798] Slow performances in RDz 9.0 with opening 7000 files located on a network driver.
*******************************************************************************/ *******************************************************************************/
package org.eclipse.rse.internal.files.ui.view; package org.eclipse.rse.internal.files.ui.view;
@ -3961,6 +3962,9 @@ public class SystemViewRemoteFileAdapter
*/ */
public boolean supportsDeferredQueries(ISubSystem subSys) public boolean supportsDeferredQueries(ISubSystem subSys)
{ {
if (subSys instanceof IRemoteFileSubSystem){
return ((IRemoteFileSubSystem)subSys).getParentRemoteFileSubSystemConfiguration().supportsDeferredQueries();
}
return !subSys.getHost().getSystemType().isLocal(); return !subSys.getHost().getSystemType().isLocal();
} }

View file

@ -1,5 +1,5 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2006, 2013 IBM Corporation and others. * Copyright (c) 2006, 2014 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
@ -54,6 +54,7 @@
* David McKnight (IBM) - [374538] [local] localFile service tries to set modified time on virtual files * David McKnight (IBM) - [374538] [local] localFile service tries to set modified time on virtual files
* Samuel Wu (IBM) - [395981] Local file encoding is not handled properly * Samuel Wu (IBM) - [395981] Local file encoding is not handled properly
* David McKnight (IBM) - [422508] Unable to map A:\ and B:\ as selectable drives in RSE View * David McKnight (IBM) - [422508] Unable to map A:\ and B:\ as selectable drives in RSE View
* David McKnight (IBM) - [420798] Slow performances in RDz 9.0 with opening 7000 files located on a network driver.
*******************************************************************************/ *******************************************************************************/
package org.eclipse.rse.internal.services.local.files; package org.eclipse.rse.internal.services.local.files;
@ -225,9 +226,15 @@ public class LocalFileService extends AbstractFileService implements ILocalServi
boolean result = false; boolean result = false;
File entry = new File(dir, name); File entry = new File(dir, name);
if (entry.exists()) { if (entry.exists()) {
if (entry.isFile()) { boolean isDirectory = entry.isDirectory();
boolean isFile = !isDirectory;
if (isFile){
isFile = entry.isFile();
}
if (isFile) {
result = _matcher.matches(name); result = _matcher.matches(name);
} else if (entry.isDirectory()) { } else if (isDirectory) {
if (type == IFileService.FILE_TYPE_FILES_AND_FOLDERS || type == IFileService.FILE_TYPE_FOLDERS) { if (type == IFileService.FILE_TYPE_FILES_AND_FOLDERS || type == IFileService.FILE_TYPE_FOLDERS) {
result = true; result = true;
} }
@ -727,7 +734,7 @@ public class LocalFileService extends AbstractFileService implements ILocalServi
// this is needed because Windows paths are case insensitive // this is needed because Windows paths are case insensitive
if (isWindows()) { if (isWindows()) {
try { try {
localParent = localParent.getCanonicalFile(); localParent = localParent.getCanonicalFile(); // can this be avoided for network drives?
} catch (IOException e) { } catch (IOException e) {
System.out.println("Can not get canonical path: " + localParent.getAbsolutePath()); //$NON-NLS-1$ System.out.println("Can not get canonical path: " + localParent.getAbsolutePath()); //$NON-NLS-1$
} }
@ -790,30 +797,36 @@ public class LocalFileService extends AbstractFileService implements ILocalServi
for (int i = 0; i < files.length; i++) for (int i = 0; i < files.length; i++)
{ {
File file = files[i]; File file = files[i];
if (file.isDirectory()) boolean isDirectory = file.isDirectory();
boolean isFile = !isDirectory;
if (isFile){
isFile = file.isFile();
}
if (isDirectory)
{ {
if (type == IFileService.FILE_TYPE_FILES_AND_FOLDERS || if (type == IFileService.FILE_TYPE_FILES_AND_FOLDERS ||
type == IFileService.FILE_TYPE_FOLDERS) type == IFileService.FILE_TYPE_FOLDERS)
{ {
results.add(new LocalHostFile(file)); results.add(new LocalHostFile(file, false, isFile));
} }
} }
else if (file.isFile()) else if (isFile)
{ {
if (type == IFileService.FILE_TYPE_FILES_AND_FOLDERS || if (type == IFileService.FILE_TYPE_FILES_AND_FOLDERS ||
type == IFileService.FILE_TYPE_FILES) type == IFileService.FILE_TYPE_FILES)
{ {
results.add(new LocalHostFile(file)); results.add(new LocalHostFile(file, false, isFile));
} else if (type == IFileService.FILE_TYPE_FOLDERS && } else if (type == IFileService.FILE_TYPE_FOLDERS &&
ArchiveHandlerManager.getInstance().isArchive(file)) { ArchiveHandlerManager.getInstance().isArchive(file)) {
// On Local Archive's should be considered Folders // On Local Archive's should be considered Folders
// as they are containers that can be opened. // as they are containers that can be opened.
results.add(new LocalHostFile(file)); results.add(new LocalHostFile(file, false, isFile));
} }
} }
else if (file.exists()) else if (file.exists())
{ {
results.add(new LocalHostFile(file)); results.add(new LocalHostFile(file, false, isFile));
} }
} }
} }
@ -824,7 +837,7 @@ public class LocalFileService extends AbstractFileService implements ILocalServi
{ {
String userHome =System.getProperty("user.home"); //$NON-NLS-1$ String userHome =System.getProperty("user.home"); //$NON-NLS-1$
File userHomeFile = new File(userHome); File userHomeFile = new File(userHome);
return new LocalHostFile(userHomeFile, (userHomeFile.getParent() == null)); return new LocalHostFile(userHomeFile, (userHomeFile.getParent() == null), userHomeFile.isFile());
} }
@ -856,7 +869,7 @@ public class LocalFileService extends AbstractFileService implements ILocalServi
IHostFile[] fileObjs = new LocalHostFile[v.size()]; IHostFile[] fileObjs = new LocalHostFile[v.size()];
for (int idx = 0; idx < v.size(); idx++) for (int idx = 0; idx < v.size(); idx++)
{ {
fileObjs[idx] = new LocalHostFile((File) v.get(idx), true); fileObjs[idx] = new LocalHostFile((File) v.get(idx), true, false);
} }
return fileObjs; return fileObjs;
@ -885,7 +898,7 @@ public class LocalFileService extends AbstractFileService implements ILocalServi
if (!isVirtualParent && !isArchiveParent) if (!isVirtualParent && !isArchiveParent)
{ {
File file = isRoot ? new File(name) : new File(remoteParent, name); File file = isRoot ? new File(name) : new File(remoteParent, name);
return new LocalHostFile(file, isRoot); return new LocalHostFile(file, isRoot, file.isFile());
} }
else else
{ {

View file

@ -15,6 +15,7 @@
* Martin Oberhuber (Wind River) - Fix [168591] LocalHostFile missing equals() * Martin Oberhuber (Wind River) - Fix [168591] LocalHostFile missing equals()
* David McKnight (IBM) - [209593] [api] add support for "file permissions" and "owner" properties for unix files * David McKnight (IBM) - [209593] [api] add support for "file permissions" and "owner" properties for unix files
* David McKnight (IBM) - [294521] Local "hidden" files and folders are always shown * David McKnight (IBM) - [294521] Local "hidden" files and folders are always shown
* David McKnight (IBM) - [420798] Slow performances in RDz 9.0 with opening 7000 files located on a network driver.
*******************************************************************************/ *******************************************************************************/
package org.eclipse.rse.internal.services.local.files; package org.eclipse.rse.internal.services.local.files;
@ -30,6 +31,14 @@ import org.eclipse.rse.services.files.IHostFilePermissionsContainer;
public class LocalHostFile implements IHostFile, IHostFilePermissionsContainer public class LocalHostFile implements IHostFile, IHostFilePermissionsContainer
{ {
private File _file; private File _file;
// cache
private long _lastQueryTime = 0;
private Boolean _isFile = null;
private Boolean _isDirectory = null;
private Boolean _exists = null;
private Boolean _isHidden = null;
private boolean _isRoot = false; private boolean _isRoot = false;
private boolean _isArchive = false; private boolean _isArchive = false;
private IHostFilePermissions _permissions = null; private IHostFilePermissions _permissions = null;
@ -40,12 +49,15 @@ public class LocalHostFile implements IHostFile, IHostFilePermissionsContainer
_isArchive = ArchiveHandlerManager.getInstance().isArchive(_file); _isArchive = ArchiveHandlerManager.getInstance().isArchive(_file);
} }
public LocalHostFile(File file, boolean isRoot) public LocalHostFile(File file, boolean isRoot, boolean isFile)
{ {
_file = file; _file = file;
_isRoot = isRoot; _isRoot = isRoot;
_isArchive = ArchiveHandlerManager.getInstance().isArchive(_file); if (!isRoot){
_isArchive = ArchiveHandlerManager.getInstance().isArchive(_file);
_isFile = new Boolean(isFile);
_isDirectory = new Boolean(!isFile);
}
} }
/* (non-Javadoc) /* (non-Javadoc)
@ -75,8 +87,11 @@ public class LocalHostFile implements IHostFile, IHostFilePermissionsContainer
public boolean isHidden() public boolean isHidden()
{ {
String name = getName(); if (_isHidden == null || needsQuery()){
return name.charAt(0) == '.' || (!_isRoot && _file.isHidden()); String name = getName();
_isHidden = new Boolean(name.charAt(0) == '.' || (!_isRoot && _file.isHidden()));
}
return _isHidden.booleanValue();
} }
public String getParentPath() public String getParentPath()
@ -86,7 +101,10 @@ public class LocalHostFile implements IHostFile, IHostFilePermissionsContainer
public boolean isDirectory() public boolean isDirectory()
{ {
return _file.isDirectory(); if (_isDirectory == null){
_isDirectory = new Boolean(_file.isDirectory());
}
return _isDirectory.booleanValue();
} }
public boolean isRoot() public boolean isRoot()
@ -96,7 +114,10 @@ public class LocalHostFile implements IHostFile, IHostFilePermissionsContainer
public boolean isFile() public boolean isFile()
{ {
return _file.isFile(); if (_isFile == null){
_isFile = new Boolean(_file.isFile());
}
return _isFile.booleanValue();
} }
public File getFile() public File getFile()
@ -106,7 +127,10 @@ public class LocalHostFile implements IHostFile, IHostFilePermissionsContainer
public boolean exists() public boolean exists()
{ {
return _file.exists(); if (_exists == null || needsQuery()){
_exists = new Boolean(_file.exists());
}
return _exists.booleanValue();
} }
public String getAbsolutePath() public String getAbsolutePath()
@ -151,4 +175,12 @@ public class LocalHostFile implements IHostFile, IHostFilePermissionsContainer
_permissions = permissions; _permissions = permissions;
} }
private boolean needsQuery(){
long t = System.currentTimeMillis();
if (_lastQueryTime == 0 || (t - _lastQueryTime) > 5000){
_lastQueryTime = t;
return true;
}
return false;
}
} }

View file

@ -1,5 +1,5 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2002, 2008 IBM Corporation and others. * Copyright (c) 2002, 2014 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
@ -16,6 +16,7 @@
* Xuan Chen (IBM) - [160775] [api] rename (at least within a zip) blocks UI threadj * Xuan Chen (IBM) - [160775] [api] rename (at least within a zip) blocks UI threadj
* Xuan Chen (IBM) - [194865] [local][Archives] Searching contents of a file in an Archive doesn't work * Xuan Chen (IBM) - [194865] [local][Archives] Searching contents of a file in an Archive doesn't work
* Xuan Chen (IBM) - [205448] [search]All the files are listed as in the Remote Search view even only found one match in a file * Xuan Chen (IBM) - [205448] [search]All the files are listed as in the Remote Search view even only found one match in a file
* David McKnight (IBM) - [420798] Slow performances in RDz 9.0 with opening 7000 files located on a network driver.
*******************************************************************************/ *******************************************************************************/
package org.eclipse.rse.internal.services.local.search; package org.eclipse.rse.internal.services.local.search;
@ -270,7 +271,7 @@ public class LocalSearchHandler implements ISearchHandler
{ {
// note that the file can not be root // note that the file can not be root
file = new LocalHostFile(theFile, false); file = new LocalHostFile(theFile, false, true);
/* TODO /* TODO
if (!isArchive) if (!isArchive)
@ -378,7 +379,7 @@ public class LocalSearchHandler implements ISearchHandler
// file is root // file is root
boolean isRoot = false; //TODO boolean isRoot = false; //TODO
fileImpl = new LocalHostFile(theFile, isRoot); fileImpl = new LocalHostFile(theFile, isRoot, true);
} }
// create local file differently for virtual directory // create local file differently for virtual directory
else else

View file

@ -1,5 +1,5 @@
/******************************************************************************** /********************************************************************************
* Copyright (c) 2006, 2009 IBM Corporation and others. All rights reserved. * Copyright (c) 2006, 2014 IBM Corporation and others. All rights reserved.
* This program and the accompanying materials are made available under the terms * This program and the accompanying materials are made available under the terms
* of the Eclipse Public License v1.0 which accompanies this distribution, and is * of the Eclipse Public License v1.0 which accompanies this distribution, and is
* available at http://www.eclipse.org/legal/epl-v10.html * available at http://www.eclipse.org/legal/epl-v10.html
@ -17,6 +17,7 @@
* Martin Oberhuber (Wind River) - [220020][api][breaking] SystemFileTransferModeRegistry should be internal * Martin Oberhuber (Wind River) - [220020][api][breaking] SystemFileTransferModeRegistry should be internal
* David Dykstal (IBM) - [222270] clean up interfaces in org.eclipse.rse.core.filters * David Dykstal (IBM) - [222270] clean up interfaces in org.eclipse.rse.core.filters
* David McKnight (IBM) - [280605] SystemTextEditor.isLocal() returns false for LocalFileSubSystemConfiguration * David McKnight (IBM) - [280605] SystemTextEditor.isLocal() returns false for LocalFileSubSystemConfiguration
* David McKnight (IBM) - [420798] Slow performances in RDz 9.0 with opening 7000 files located on a network driver.
********************************************************************************/ ********************************************************************************/
package org.eclipse.rse.subsystems.files.local; package org.eclipse.rse.subsystems.files.local;
@ -206,7 +207,8 @@ public class LocalFileSubSystemConfiguration extends FileServiceSubSystemConfigu
public boolean supportsDeferredQueries() { public boolean supportsDeferredQueries() {
//No need for deferred queries in Local, since these are always fast //No need for deferred queries in Local, since these are always fast
return false; //return false;
return true;
} }
public IConnectorService getConnectorService(IHost host) public IConnectorService getConnectorService(IHost host)