From ab96f3f28c21e535cf21e0db8dc702fc9d8528c0 Mon Sep 17 00:00:00 2001 From: hevinci Date: Wed, 1 Mar 2023 20:35:01 +0800 Subject: [PATCH] update cache system MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 优化缓存系统的存储目录结构。 --- .../Runtime/CacheSystem/CacheSystem.cs | 9 +++ .../Internal/FindCacheFilesOperation.cs | 67 ++++++++++--------- .../Operations/PackageCachingOperation.cs | 3 + .../Runtime/CacheSystem/PackageCache.cs | 8 +++ .../Runtime/PatchSystem/PatchBundle.cs | 10 +-- 5 files changed, 63 insertions(+), 34 deletions(-) diff --git a/Assets/YooAsset/Runtime/CacheSystem/CacheSystem.cs b/Assets/YooAsset/Runtime/CacheSystem/CacheSystem.cs index 3f17277..7b812d8 100644 --- a/Assets/YooAsset/Runtime/CacheSystem/CacheSystem.cs +++ b/Assets/YooAsset/Runtime/CacheSystem/CacheSystem.cs @@ -23,6 +23,15 @@ namespace YooAsset _cachedDic.Clear(); } + /// + /// 获取缓存文件总数 + /// + public static int GetCachedFilesCount(string packageName) + { + var cache = GetOrCreateCache(packageName); + return cache.GetCachedFilesCount(); + } + /// /// 查询是否为验证文件 /// diff --git a/Assets/YooAsset/Runtime/CacheSystem/Operations/Internal/FindCacheFilesOperation.cs b/Assets/YooAsset/Runtime/CacheSystem/Operations/Internal/FindCacheFilesOperation.cs index 6be1a7c..4149c7a 100644 --- a/Assets/YooAsset/Runtime/CacheSystem/Operations/Internal/FindCacheFilesOperation.cs +++ b/Assets/YooAsset/Runtime/CacheSystem/Operations/Internal/FindCacheFilesOperation.cs @@ -101,17 +101,21 @@ namespace YooAsset if (isFindItem == false) break; - var fileFoder = _bundleFilesEnumerator.Current; - string cacheGUID = fileFoder.Name; - if (CacheSystem.IsCached(_packageName, cacheGUID)) - continue; + var rootFoder = _bundleFilesEnumerator.Current; + var childDirectories = rootFoder.GetDirectories(); + foreach(var chidDirectory in childDirectories) + { + string cacheGUID = chidDirectory.Name; + if (CacheSystem.IsCached(_packageName, cacheGUID)) + continue; - // 创建验证元素类 - string fileRootPath = fileFoder.FullName; - string dataFilePath = $"{fileRootPath}/{ YooAssetSettings.CacheBundleDataFileName}"; - string infoFilePath = $"{fileRootPath}/{ YooAssetSettings.CacheBundleInfoFileName}"; - VerifyElement element = new VerifyElement(_packageName, cacheGUID, fileRootPath, dataFilePath, infoFilePath); - VerifyElements.Add(element); + // 创建验证元素类 + string fileRootPath = chidDirectory.FullName; + string dataFilePath = $"{fileRootPath}/{ YooAssetSettings.CacheBundleDataFileName}"; + string infoFilePath = $"{fileRootPath}/{ YooAssetSettings.CacheBundleInfoFileName}"; + VerifyElement element = new VerifyElement(_packageName, cacheGUID, fileRootPath, dataFilePath, infoFilePath); + VerifyElements.Add(element); + } if (OperationSystem.IsBusy) break; @@ -131,32 +135,35 @@ namespace YooAsset if (isFindItem == false) break; - var fileFoder = _rawFilesEnumerator.Current; - string cacheGUID = fileFoder.Name; - if (CacheSystem.IsCached(_packageName, cacheGUID)) - continue; - - // 获取数据文件的后缀名 - string dataFileExtension = string.Empty; - var fileInfos = fileFoder.GetFiles(); - foreach (var fileInfo in fileInfos) + var rootFoder = _rawFilesEnumerator.Current; + var childDirectories = rootFoder.GetDirectories(); + foreach (var chidDirectory in childDirectories) { - if (fileInfo.Extension == ".temp") + string cacheGUID = chidDirectory.Name; + if (CacheSystem.IsCached(_packageName, cacheGUID)) continue; - if (fileInfo.Name.StartsWith(YooAssetSettings.CacheBundleDataFileName)) + // 获取数据文件的后缀名 + string dataFileExtension = string.Empty; + var fileInfos = chidDirectory.GetFiles(); + foreach (var fileInfo in fileInfos) { - dataFileExtension = fileInfo.Extension; - break; + if (fileInfo.Extension == ".temp") + continue; + if (fileInfo.Name.StartsWith(YooAssetSettings.CacheBundleDataFileName)) + { + dataFileExtension = fileInfo.Extension; + break; + } } - } - // 创建验证元素类 - string fileRootPath = fileFoder.FullName; - string dataFilePath = $"{fileRootPath}/{ YooAssetSettings.CacheBundleDataFileName}{dataFileExtension}"; - string infoFilePath = $"{fileRootPath}/{ YooAssetSettings.CacheBundleInfoFileName}"; - VerifyElement element = new VerifyElement(_packageName, cacheGUID, fileRootPath, dataFilePath, infoFilePath); - VerifyElements.Add(element); + // 创建验证元素类 + string fileRootPath = chidDirectory.FullName; + string dataFilePath = $"{fileRootPath}/{ YooAssetSettings.CacheBundleDataFileName}{dataFileExtension}"; + string infoFilePath = $"{fileRootPath}/{ YooAssetSettings.CacheBundleInfoFileName}"; + VerifyElement element = new VerifyElement(_packageName, cacheGUID, fileRootPath, dataFilePath, infoFilePath); + VerifyElements.Add(element); + } if (OperationSystem.IsBusy) break; diff --git a/Assets/YooAsset/Runtime/CacheSystem/Operations/PackageCachingOperation.cs b/Assets/YooAsset/Runtime/CacheSystem/Operations/PackageCachingOperation.cs index 8f9f55a..c8c9777 100644 --- a/Assets/YooAsset/Runtime/CacheSystem/Operations/PackageCachingOperation.cs +++ b/Assets/YooAsset/Runtime/CacheSystem/Operations/PackageCachingOperation.cs @@ -63,6 +63,9 @@ namespace YooAsset // 注意:总是返回成功 _steps = ESteps.Done; Status = EOperationStatus.Succeed; + + int totalCount = CacheSystem.GetCachedFilesCount(_packageName); + YooLogger.Log($"Package '{_packageName}' cached files count : {totalCount}"); } } } diff --git a/Assets/YooAsset/Runtime/CacheSystem/PackageCache.cs b/Assets/YooAsset/Runtime/CacheSystem/PackageCache.cs index be42a41..1ddaab7 100644 --- a/Assets/YooAsset/Runtime/CacheSystem/PackageCache.cs +++ b/Assets/YooAsset/Runtime/CacheSystem/PackageCache.cs @@ -44,6 +44,14 @@ namespace YooAsset _wrappers.Clear(); } + /// + /// 获取缓存文件总数 + /// + public int GetCachedFilesCount() + { + return _wrappers.Count; + } + /// /// 查询缓存记录 /// diff --git a/Assets/YooAsset/Runtime/PatchSystem/PatchBundle.cs b/Assets/YooAsset/Runtime/PatchSystem/PatchBundle.cs index 7e6e041..af97c95 100644 --- a/Assets/YooAsset/Runtime/PatchSystem/PatchBundle.cs +++ b/Assets/YooAsset/Runtime/PatchSystem/PatchBundle.cs @@ -71,15 +71,16 @@ namespace YooAsset if (string.IsNullOrEmpty(_cachedDataFilePath) == false) return _cachedDataFilePath; + string folderName = FileHash.Substring(0, 2); if (IsRawFile) { string cacheRoot = PersistentHelper.GetCachedRawFileFolderPath(PackageName); - _cachedDataFilePath = $"{cacheRoot}/{CacheGUID}/{YooAssetSettings.CacheBundleDataFileName}{_fileExtension}"; + _cachedDataFilePath = $"{cacheRoot}/{folderName}/{CacheGUID}/{YooAssetSettings.CacheBundleDataFileName}{_fileExtension}"; } else { string cacheRoot = PersistentHelper.GetCachedBundleFileFolderPath(PackageName); - _cachedDataFilePath = $"{cacheRoot}/{CacheGUID}/{YooAssetSettings.CacheBundleDataFileName}"; + _cachedDataFilePath = $"{cacheRoot}/{folderName}/{CacheGUID}/{YooAssetSettings.CacheBundleDataFileName}"; } return _cachedDataFilePath; } @@ -96,15 +97,16 @@ namespace YooAsset if (string.IsNullOrEmpty(_cachedInfoFilePath) == false) return _cachedInfoFilePath; + string folderName = FileHash.Substring(0, 2); if (IsRawFile) { string cacheRoot = PersistentHelper.GetCachedRawFileFolderPath(PackageName); - _cachedInfoFilePath = $"{cacheRoot}/{CacheGUID}/{YooAssetSettings.CacheBundleInfoFileName}"; + _cachedInfoFilePath = $"{cacheRoot}/{folderName}/{CacheGUID}/{YooAssetSettings.CacheBundleInfoFileName}"; } else { string cacheRoot = PersistentHelper.GetCachedBundleFileFolderPath(PackageName); - _cachedInfoFilePath = $"{cacheRoot}/{CacheGUID}/{YooAssetSettings.CacheBundleInfoFileName}"; + _cachedInfoFilePath = $"{cacheRoot}/{folderName}/{CacheGUID}/{YooAssetSettings.CacheBundleInfoFileName}"; } return _cachedInfoFilePath; }