파일/하위 폴더를 병렬로 복사하는이 재귀 copyFolder 메서드가 있습니다.WinRT에서 파일의 병렬 또는 순차 복사
copyFileIfNewerAsync = function(sourceFile, destFolder) {
return destFolder.tryGetItemAsync(sourceFile.name).then(function(destFile) {
if (destFile) {
return WinJS.Promise.join({
sourceProperties: sourceFile.getBasicPropertiesAsync(),
destProperties: destFile.getBasicPropertiesAsync()
}).then(function(_arg) {
var destProperties, sourceProperties;
sourceProperties = _arg.sourceProperties, destProperties = _arg.destProperties;
if (sourceProperties.size !== destProperties.size && sourceProperties.dateModified > destProperties.dateModified) {
logger.debug("Updating " + destFolder.path + "\\" + destFile.name);
return sourceFile.copyAsync(destFolder, sourceFile.name, NameCollisionOption.replaceExisting);
} else {
return logger.trace("" + destFolder.path + "\\" + destFile.name + " up-to-date (" + destProperties.dateModified + ")");
}
});
} else {
logger.debug("Copying " + sourceFile.name + " to " + destFolder.path);
return sourceFile.copyAsync(destFolder, sourceFile.name, NameCollisionOption.replaceExisting);
}
});
};
copyFolderAsync = function(destFolder, sourceFolder) {
return destFolder.createFolderAsync(sourceFolder.name, CreationCollisionOption.openIfExists).then(function(destSubFolder) {
return sourceFolder.getItemsAsync().then(function(items) {
return WinJS.Promise.join(items.map(function(item) {
if (item instanceof Windows.Storage.StorageFile) {
return copyFileIfNewerAsync(item, destSubFolder);
} else {
return copyFolderAsync(destSubFolder, item);
}
}));
});
});
};
이것은 시스템에 상당한 영향을줍니다. 순차적 복사 방식은 시스템에 스트레스가 적고 결국에는 더 빨라지 는가?
그렇다면 순차적으로 실행되도록 코드를 리팩토링해야하는 이유는 무엇입니까?
이 다음 낮은 프리 오에서 모든 다운로드를 예약해야 WinJS.Scheduler
preloadAsync = (serialNumbers, expert) ->
assert(expert)
assert(serialNumbers)
serialNumbers = [serialNumbers] unless Array.isArray(serialNumbers)
preloadPromise?.cancel()
preloadPromise = serialNumbers.reduce((p, serialNumber) ->
p.then(WinJS.Utilities.Scheduler.schedulePromiseBelowNormal)
.then() ->
preloadOneAsync(serialNumber, expert)
.then null, (error) ->
if error.name isnt "Canceled"
logger.error("Could not create preloaded inspection #{serialNumber}", error)
, WinJS.Promise.as())
에 대한
갱신?
감사 Kraig. 그것을 밖으로 시도하고 다시 여기에 올 것이다. – philk
Kraig가 일정 시간 동안 일정 잡기 위해 UI 유휴 상태에서 파일을 복사하기 만하면 WinJS.Utilities.Scheduler.schedulePromiseBelowNormal을 사용할 수 있습니까? – philk
예, Windows의 사람들과 확인한 결과, 우선 순위가 낮은 JS 콜백 내에서 생성 된 WinRT 비동기 호출이 더 낮은 우선 순위로 실행됩니다. 엄밀히 말하면 JS 콜백의 CoreDispatcher 우선 순위를 상속합니다. 따라서 유휴 상태에서 실행되도록 스케줄러를 사용하면 UI 응답 성 문제를 방지 할 수 있습니다. –