我有一个Excel COM加载项,它读取工作簿的CustomDocumentProperties部分。
这就是我从CustomDocumentProperties部分访问特定条目的方式
DocumentProperties docProperties = (DocumentProperties)
xlWorkbook.CustomDocumentProperties;
docProperty = docProperties[propName];
问题是,当CustomDocumentProperties包含超过8000个条目时,
代码真的很糟糕。我已经运行了CPU事件探查器,它显示以下行需要一分钟以上的时间。
docProperty = docProperties[propName];
有谁知道如何提高访问DocumentProperties的性能?
谢谢!
最佳答案
我怀疑您是否可以采取任何措施来提高文档属性的性能。我相信它是作为一个简单的列表而不是字典或哈希表实现的。实际上,我不认为该列表是经过排序的,因此必须要访问8000个条目(平均其中一半或4000个)才能找到您要查找的属性。
您可能会考虑不将CustomDocumentProperties用作字典。相反,您可以尝试将所有8000个条目放入自定义词典中,对其进行序列化,然后将整个序列化的词典作为单个条目添加到CustomDocumentProperties。因此,要使用它,您将访问CustomDocumentProperties,反序列化字典,然后重复使用它。完成后,如果字典有任何更改,则必须重新序列化它,然后将其保存回CustomDocumentProperties,您可能只想执行一次-例如,在保存工作簿之前。 (您可能希望放置代码以重新序列化并将自定义词典保存到Workbook.BeforeSave事件中的CustomDocumentProperties。)