IPropertyDatabaseView
интерфейс в UnityEditor.Search
Описание
Интерфейс представления PropertyDatabase.
Идея PropertyDatabase представление похоже на представление файла с отображением в памяти Windows, хотя и гораздо проще. PropertyDatabase представление имеет свой поток файлов, который может получить доступ к PropertyDatabase независимо от других точек зрения. Точки зрения одного PropertyDatabase синхронизированы, так что одновременные доступы разрешены. Однако для того, чтобы одновременные доступы работали правильно, каждый поток должен иметь свой собственный экземпляр представления.
Все операции, доступные на PropertyDatabase класса доступны у самого представления. При работе непосредственно с PropertyDatabase экземпляра создаётся внутреннее представление, которое берёт на себя всю синхронизацию. Поскольку речь идёт о файлах, открытие представления обходится недёшево. Поэтому рекомендуется открыть представление один раз и использовать его как можно дольше, прежде чем освобождать.
using System.Collections.Generic; using NUnit.Framework; using UnityEditor; using UnityEditor.Search; using UnityEngine; static class Example_IPropertyDatabaseView { // Where the property database will be written. const string propertyDatabaseFilePath = "Temp/test_ipropertydatabaseview_db"; static PropertyDatabase propertyDatabase; static void InitializePropertyDatabase() { // Setup the property database. We configure it with automatic flushing so the file store // will be updated automatically after an update. propertyDatabase = new PropertyDatabase(propertyDatabaseFilePath, true); } static void ClearPropertyDatabase() { propertyDatabase.Clear(); propertyDatabase.Dispose(); } static PropertyDatabaseRecordKey GetPropertyKey(int id, IPropertyDatabaseView view) { return view.CreateRecordKey((ulong)id / 100, view.CreatePropertyHash((id % 100).ToString())); } static object LoadPropertyValue(int id, IPropertyDatabaseView view) { var recordKey = GetPropertyKey(id, view); if (view.TryLoad(recordKey, out object value)) return value; // Fetch the value with the time consuming operation and store it for future // accesses. value = id.ToString(); view.Store(recordKey, value); return value; } [MenuItem("Examples/IPropertyDatabaseView/Interface")] public static void RunExample() { InitializePropertyDatabase(); if (!propertyDatabase.valid) { Debug.LogFormat(LogType.Error, LogOption.NoStacktrace, null, $"PropertyDatabase \"{propertyDatabase.filePath}\" failed to open properly."); return; } // Doing a change on the property database internally opens a view on the actual data, // which is non negligible. Therefore, it is advised to open a view once and use it as much as you // can. // Note: when doing concurrent accesses to the property database, each thread must have its own // view instance. var allValues = new Dictionary<int, object>(); using (var view = propertyDatabase.GetView()) { for (var i = 0; i < 1000; ++i) { var value = LoadPropertyValue(i, view); allValues.Add(i, value); } } // Validate everything is in the database using (var view = propertyDatabase.GetView()) { for (var i = 0; i < 1000; ++i) { var key = GetPropertyKey(i, view); if (!view.TryLoad(key, out object value)) Assert.Fail("Record should be in the database."); Assert.AreEqual(i.ToString(), value); } } ClearPropertyDatabase(); } }
Дополнительные ресурсы: PropertyDatabase.GetView
Открытые методы
| Метод | Описание |
|---|---|
| Clear | Очистка всего содержимого PropertyDatabase. |
| CreateDocumentKey | Создает ключ документа из идентификатора документа. |
| CreatePropertyHash | Создает хэш свойства из пути свойства. |
| CreateRecordKey | Создает ключ записи из идентификатора документа и пути к свойству. |
| EnumerateAll | Перечисляет все записи, хранящиеся в PropertyDatabase |
| GetValueFromRecord | Десериализация значения записи в соответствующий тип. |
| Invalidate | Отменяет действие одной записи свойства, чтобы она больше не могла быть получена. |
| InvalidateMask | Отмена действия всех свойств, сохраненных из нескольких документов, соответствующих маске ключа документа. |
| IsPersistableType | Возвращает логическое значение, указывающее, может ли тип быть сохранен в резервном файле. |
| Store | Хранит свойство документа. |
| Sync | Синхронизирует представления, чтобы они имели доступ к одному и тому же содержимому. |
| TryLoad | Загружает одно свойство, уже разрядованное в объект. |