2

ブックのCustomDocumentPropertiesセクションを読み取るExcelCOMアドインがあります。

これは、CustomDocumentPropertiesセクションから特定のエントリにアクセスする方法です。

DocumentProperties docProperties = (DocumentProperties)
                    xlWorkbook.CustomDocumentProperties;

            docProperty = docProperties[propName];

問題は、CustomDocumentPropertiesに8000を超えるエントリが含まれている場合、このコードのパフォーマンスが非常に悪いことです。CPUプロファイラーを実行しましたが、次の行に1分以上かかることがわかりました。

docProperty = docProperties[propName];

DocumentPropertiesへのアクセスのパフォーマンスを向上させる方法を知っている人はいますか?

ありがとう!

4

1 に答える 1

1

ドキュメントのプロパティのパフォーマンスを向上させるためにできることは何もないと思います。辞書やハッシュテーブルとしてではなく、単純なリストとして実装されていると思います。実際、リストが並べ替えられているとは思わないので、8000のエントリがある場合、探しているプロパティを見つけるには、平均してその半分、つまり4000にアクセスする必要があります。

CustomDocumentPropertiesをディクショナリとして使用しないことを検討してください。代わりに、8000個すべてのエントリをカスタムディクショナリに入れてシリアル化し、シリアル化されたディクショナリ全体を単一のエントリとしてCustomDocumentPropertiesに追加してみてください。したがって、これを使用するには、CustomDocumentPropertiesにアクセスし、ディクショナリを逆シリアル化してから、繰り返し使用します。完了したら、ディクショナリに変更があった場合は、それを再シリアル化してCustomDocumentPropertiesに保存し直す必要があります。これは、たとえば、ブックを保存する直前に1回だけ実行する必要があります。(コードを再シリアル化して、カスタムディクショナリをWorkbook.BeforeSaveイベント内のCustomDocumentPropertiesに保存することをお勧めします。)

于 2010-01-21T16:54:17.180 に答える