From 769134eaf9844ea940baaafb614f17dbf345a100 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E5=86=A0=E5=B3=B0?= Date: Tue, 31 Dec 2024 10:16:20 +0800 Subject: [PATCH] update cache system MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 移除ThreadSyncContext类 --- .../CacheSystem/CacheFileElement.cs | 6 ++- .../Operation/VerifyCacheFilesOperation.cs | 31 ++++++++------- .../Operation/VerifyTempFileOperation.cs | 7 +--- .../CacheSystem/ThreadSyncContext.cs | 38 ------------------- .../CacheSystem/ThreadSyncContext.cs.meta | 11 ------ 5 files changed, 24 insertions(+), 69 deletions(-) delete mode 100644 Assets/YooAsset/Runtime/FileSystem/CacheSystem/ThreadSyncContext.cs delete mode 100644 Assets/YooAsset/Runtime/FileSystem/CacheSystem/ThreadSyncContext.cs.meta diff --git a/Assets/YooAsset/Runtime/FileSystem/CacheSystem/CacheFileElement.cs b/Assets/YooAsset/Runtime/FileSystem/CacheSystem/CacheFileElement.cs index 0b4d57c2..6264a3be 100644 --- a/Assets/YooAsset/Runtime/FileSystem/CacheSystem/CacheFileElement.cs +++ b/Assets/YooAsset/Runtime/FileSystem/CacheSystem/CacheFileElement.cs @@ -10,10 +10,14 @@ namespace YooAsset public string DataFilePath { private set; get; } public string InfoFilePath { private set; get; } - public EFileVerifyResult Result; public string DataFileCRC; public long DataFileSize; + /// + /// 注意:原子操作对象 + /// + public int Result = 0; + public CacheFileElement(string packageName, string bundleGUID, string fileRootPath, string dataFilePath, string infoFilePath) { PackageName = packageName; diff --git a/Assets/YooAsset/Runtime/FileSystem/CacheSystem/Operation/VerifyCacheFilesOperation.cs b/Assets/YooAsset/Runtime/FileSystem/CacheSystem/Operation/VerifyCacheFilesOperation.cs index b2496ff3..dc8a3cff 100644 --- a/Assets/YooAsset/Runtime/FileSystem/CacheSystem/Operation/VerifyCacheFilesOperation.cs +++ b/Assets/YooAsset/Runtime/FileSystem/CacheSystem/Operation/VerifyCacheFilesOperation.cs @@ -19,7 +19,6 @@ namespace YooAsset Done, } - private readonly ThreadSyncContext _syncContext = new ThreadSyncContext(); private readonly ICacheSystem _cacheSystem; private readonly EFileVerifyLevel _verifyLevel; private List _waitingList; @@ -66,7 +65,17 @@ namespace YooAsset if (_steps == ESteps.UpdateVerify) { - _syncContext.Update(); + // 检测校验结果 + for (int i = _verifyingList.Count - 1; i >= 0; i--) + { + var verifyElement = _verifyingList[i]; + int result = verifyElement.Result; + if (result != 0) + { + _verifyingList.Remove(verifyElement); + RecordVerifyFile(verifyElement); + } + } Progress = GetProgress(); if (_waitingList.Count == 0 && _verifyingList.Count == 0) @@ -86,7 +95,8 @@ namespace YooAsset break; var element = _waitingList[i]; - if (BeginVerifyFileWithThread(element)) + bool succeed = ThreadPool.QueueUserWorkItem(new WaitCallback(VerifyInThread), element); + if (succeed) { _waitingList.RemoveAt(i); _verifyingList.Add(element); @@ -106,22 +116,15 @@ namespace YooAsset return 1f; return (float)(_succeedCount + _failedCount) / _verifyTotalCount; } - private bool BeginVerifyFileWithThread(CacheFileElement element) - { - return ThreadPool.QueueUserWorkItem(new WaitCallback(VerifyInThread), element); - } private void VerifyInThread(object obj) { CacheFileElement element = (CacheFileElement)obj; - element.Result = VerifyingCacheFile(element, _verifyLevel); - _syncContext.Post(VerifyCallback, element); + int verifyResult = (int)VerifyingCacheFile(element, _verifyLevel); + element.Result = verifyResult; } - private void VerifyCallback(object obj) + private void RecordVerifyFile(CacheFileElement element) { - CacheFileElement element = (CacheFileElement)obj; - _verifyingList.Remove(element); - - if (element.Result == EFileVerifyResult.Succeed) + if (element.Result == (int)EFileVerifyResult.Succeed) { _succeedCount++; var fileWrapper = new CacheWrapper(element.InfoFilePath, element.DataFilePath, element.DataFileCRC, element.DataFileSize); diff --git a/Assets/YooAsset/Runtime/FileSystem/CacheSystem/Operation/VerifyTempFileOperation.cs b/Assets/YooAsset/Runtime/FileSystem/CacheSystem/Operation/VerifyTempFileOperation.cs index bc3199da..c9c21b71 100644 --- a/Assets/YooAsset/Runtime/FileSystem/CacheSystem/Operation/VerifyTempFileOperation.cs +++ b/Assets/YooAsset/Runtime/FileSystem/CacheSystem/Operation/VerifyTempFileOperation.cs @@ -40,7 +40,8 @@ namespace YooAsset if (_steps == ESteps.VerifyFile) { - if (BeginVerifyFileWithThread(_element)) + bool succeed = ThreadPool.QueueUserWorkItem(new WaitCallback(VerifyInThread), _element); + if (succeed) { _steps = ESteps.Waiting; } @@ -77,10 +78,6 @@ namespace YooAsset } } - private bool BeginVerifyFileWithThread(TempFileElement element) - { - return ThreadPool.QueueUserWorkItem(new WaitCallback(VerifyInThread), element); - } private void VerifyInThread(object obj) { TempFileElement element = (TempFileElement)obj; diff --git a/Assets/YooAsset/Runtime/FileSystem/CacheSystem/ThreadSyncContext.cs b/Assets/YooAsset/Runtime/FileSystem/CacheSystem/ThreadSyncContext.cs deleted file mode 100644 index 65af1f18..00000000 --- a/Assets/YooAsset/Runtime/FileSystem/CacheSystem/ThreadSyncContext.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Concurrent; -using System.Threading; - -namespace YooAsset -{ - /// - /// 同步其它线程里的回调到主线程里 - /// 注意:Unity3D中需要设置Scripting Runtime Version为.NET4.6 - /// - internal sealed class ThreadSyncContext : SynchronizationContext - { - private readonly ConcurrentQueue _safeQueue = new ConcurrentQueue(); - - /// - /// 更新同步队列 - /// - public void Update() - { - while (true) - { - if (_safeQueue.TryDequeue(out Action action) == false) - return; - action.Invoke(); - } - } - - /// - /// 向同步队列里投递一个回调方法 - /// - public override void Post(SendOrPostCallback callback, object state) - { - Action action = new Action(() => { callback(state); }); - _safeQueue.Enqueue(action); - } - } -} \ No newline at end of file diff --git a/Assets/YooAsset/Runtime/FileSystem/CacheSystem/ThreadSyncContext.cs.meta b/Assets/YooAsset/Runtime/FileSystem/CacheSystem/ThreadSyncContext.cs.meta deleted file mode 100644 index fbe09c11..00000000 --- a/Assets/YooAsset/Runtime/FileSystem/CacheSystem/ThreadSyncContext.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1c8ce2c52a3e9964fa50a9c031e4e593 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: