Поделиться через


Кэширование данных

Объекты данных можно кэшировать в настройке уровня документа, чтобы получить доступ к данным в автономном режиме или без открытия Microsoft Office Word или Microsoft Office Excel. Чтобы кэшировать объект, объект должен иметь тип данных, соответствующий определенным требованиям. Многие распространенные типы данных в платформа .NET Framework соответствуют этим требованиям, включая Stringи DataSet.DataTable

Область применения. Сведения в этом разделе относятся к проектам уровня документа для Excel и Word. Дополнительные сведения см. в разделе "Функции", доступные по Приложение Office ликации и типу проекта.

Существует два способа добавления объекта в кэш данных:

Требования к кэшируемым объектам данных

Чтобы кэшировать объект данных в решении, объект должен соответствовать следующим требованиям:

  • Быть общедоступным полем чтения и записи или свойством ведущего элемента, например ThisDocument класса или ThisWorkbook класса.

  • Не быть индексатором или другим параметризованным свойством.

    Кроме того, объект данных должен быть сериализуемым XmlSerializer классом, что означает, что тип объекта должен иметь следующие характеристики:

  • Быть общедоступным типом.

  • Имеет открытый конструктор без параметров.

  • Не выполняется код, требующий дополнительных привилегий безопасности.

  • Предоставление только открытых свойств чтения и записи (другие свойства будут игнорироваться).

  • Не предоставляют многомерные массивы (принимаются вложенные массивы).

  • Не возвращают интерфейсы из свойств и полей.

  • Не реализуется IDictionary , если коллекция.

    При кэшировании объекта данных среда выполнения набор средств Visual Studio для Office сериализует объект в XML-строку, хранящуюся в пользовательской XML-части документа. Дополнительные сведения см. в разделе "Общие сведения о пользовательских XML-частях".

Ограничения размера кэшированных данных

Существует ряд ограничений на общий объем данных, которые можно добавить в кэш данных в документе, а также размер любого отдельного объекта в кэше данных. При превышении этих ограничений приложение может неожиданно закрыться при сохранении данных в кэше данных.

Чтобы избежать этих ограничений, следуйте приведенным ниже рекомендациям.

  • Не добавляйте объект размером более 10 МБ в кэш данных.

  • Не добавляйте более 100 МБ общих данных в кэш данных в одном документе.

    Это приблизительные значения. Точные ограничения зависят от нескольких факторов, включая доступную ОЗУ и количество выполняемых процессов.

Управление поведением кэшированных объектов

Чтобы получить больше контроля над поведением кэшированного объекта, можно реализовать ICachedType интерфейс в типе кэшированного объекта. Например, этот интерфейс можно реализовать, если вы хотите управлять тем, как пользователь уведомляется об изменении объекта. Примеры кода, демонстрирующие реализацию ICachedType, см ControlCollection . класс в примере динамических элементов управления Excel и примере динамических элементов управления Word в примерах разработки Office и пошаговых руководствах.

Сохранение изменений в кэшированных данных в документах, защищенных паролем

Если кэшировать объекты данных в документе, защищенном паролем, изменения кэшированных данных не сохраняются. Вы можете сохранить изменения в кэшированных данных, переопределив два метода. Переопределите эти методы, чтобы временно удалить защиту при сохранении документа, а затем повторно применить защиту после завершения операции сохранения.

Дополнительные сведения см. в статье "Практическое руководство. Кэширование данных в документе, защищенном паролем".

Предотвращение потери данных при добавлении значений NULL в кэш данных

При добавлении объектов в кэш данных все кэшированные объекты необходимо инициализировать в ненулевое значение перед сохранением и закрытием документа. Если любой кэшированный объект имеет значение NULL при сохранении и закрытии документа, среда выполнения набор средств Visual Studio для Office автоматически удаляет все кэшированные объекты из кэша данных.

При добавлении объекта с значением NULL в кэш данных с помощью CachedAttribute атрибута во время разработки можно использовать ServerDocument класс для инициализации кэшированных объектов данных перед открытием документа. Это полезно, если вы хотите инициализировать кэшированные данные на сервере без установки Word или Excel, прежде чем документ будет открыт конечным пользователем. Дополнительные сведения см. в разделе "Доступ к данным" в документах на сервере.