2

CEditorをページとしてカスタムMultiPageEditorPartに追加しようとしています。何かのようなもの:

@Override
protected void createPages(){
  myEditor = new CEditor();
  addPage(myEditor , getEditorInput());
...

問題は、myEditorがリークされ、これにより大きなメモリリークが発生する可能性があることです。メモリリークは、削除されていないさまざまなリスナーが原因で発生します(CInformationProvider.EditorWatcherはpartListener、AdaptedSourceViewerのselectionChangeListenersなど)

独立したCEditorを開いたときと比較すると、サイトがPartSite(MultiPageEditorPartはデフォルトでそのページにMultiPageEditorSiteを作成する)であるため、エディターが閉じられていないことがわかりました(WorkbenchPage-> closeEditorメソッドを参照)。

CEditorページのエディターサイトをEditorSiteに変更しました。その後、エディターはリークされなくなりましたが、別のオブジェクトがまだリークしているため、エディターは適切に閉じられませんでした。さらに、keyBindingは機能しなくなりました。まだこのソリューションを機能させようとしていますが、正しいアプローチであるとは複雑に思えます。

私は何かが足りないのですか?エディターをページとして追加しても、それほど多くの問題は発生しません。

4

0 に答える 0