Проблема с производительностью при доступе к Microsoft.Office.Core.DocumentProperties - PullRequest
2 голосов
/ 21 января 2010

У меня есть надстройка Excel COM, которая читает раздел CustomDocumentProperties рабочей книги.

Это способ доступа к определенной записи из раздела CustomDocumentProperties

DocumentProperties docProperties = (DocumentProperties)
                    xlWorkbook.CustomDocumentProperties;

            docProperty = docProperties[propName];

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

docProperty = docProperties[propName];

Кто-нибудь знает, как улучшить производительность доступа к DocumentProperties?

Спасибо!

1 Ответ

1 голос
/ 21 января 2010

Я сомневаюсь, что есть что-то, что вы могли бы сделать, чтобы улучшить производительность свойств документа. Я считаю, что он реализован в виде простого списка, а не словаря или хэш-таблицы. На самом деле, я не верю, что список отсортирован, поэтому с 8000 записей, в среднем половина из них, или 4000, нужно было бы получить доступ, чтобы найти свойство, которое вы ищете.

Возможно, вы не захотите использовать CustomDocumentProperties в качестве словаря. Вместо этого вы можете попробовать поместить все 8000 ваших записей в пользовательский словарь, сериализовать его, а затем добавить весь сериализованный словарь в CustomDocumentProperties как одну запись. Таким образом, чтобы использовать его, вы должны получить доступ к CustomDocumentProperties, десериализовать словарь, а затем использовать его несколько раз. Когда это будет сделано, если в словаре будут какие-либо изменения, вам придется повторно сериализовать его и сохранить обратно в CustomDocumentProperties, что вы, вероятно, захотите сделать только один раз - например, непосредственно перед сохранением своей книги. (Возможно, вы захотите поместить код для повторной сериализации и сохранить свой пользовательский словарь в CustomDocumentProperties в событии Workbook.BeforeSave .)

...