mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-26 10:25:32 +02:00
[420798] Slow performances in RDz 9.0 with opening 7000 files located on
a network driver.
This commit is contained in:
parent
4dae6e06f6
commit
58064dbe0e
5 changed files with 79 additions and 27 deletions
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Add table
Reference in a new issue