diff --git a/GFramework.Game/storage/ReadMe.md b/GFramework.Game/storage/ReadMe.md index 68ffb2f..cc9a917 100644 --- a/GFramework.Game/storage/ReadMe.md +++ b/GFramework.Game/storage/ReadMe.md @@ -13,6 +13,7 @@ - 支持同步和异步操作 - 自动创建存储目录 - 防止路径遍历攻击(过滤非法文件名字符) +- 通过细粒度锁机制保证线程安全(每个键都有独立的锁) ### 构造函数 @@ -125,6 +126,9 @@ settingsStorage.Write("level", "high"); 实现能够正确处理你要存储的数据类型。 2. **错误处理**:[FileStorage](./FileStorage.cs) 的 `Read(string key)` 方法会在键不存在时抛出异常,可以使用 `Read(string key, T defaultValue)` 来避免异常。 -3. **线程安全**:当前实现不是线程安全的,如需在多线程环境中使用,请添加适当的同步机制。 +3. **线程安全**:[FileStorage](./FileStorage.cs) 通过细粒度锁机制保证线程安全,每个键都有独立的锁,因此不同键的操作可以并发执行。 4. **文件权限**:确保应用程序对指定的存储目录有读写权限。 -5. **路径安全**:[FileStorage](./FileStorage.cs) 会自动防止路径遍历攻击,因此键不能包含 `..`,并且特殊字符会被替换为下划线。 \ No newline at end of file +5. **路径安全**:[FileStorage](./FileStorage.cs) 会自动防止路径遍历攻击,因此键不能包含 `..`,并且特殊字符会被替换为下划线。 +6. **存储键格式**:键可以包含 `/` 作为分隔符,这将被转换为相应的目录层级,例如 `"player/profile"` 会存储在 + `player/profile.dat` 文件中。 +7. **异步操作**:尽管异步读写操作使用了异步IO,但仍会使用锁来保证对同一键的并发访问安全。