2

我正在尝试将 CEditor 作为页面添加到自定义 MultiPageEditorPart。就像是:

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

问题是myEditor被泄露,这可能导致大量内存泄露。内存泄漏是由不同的未移除的监听器引起的(CInformationProvider.EditorWatcher 是一个partListener,selectionChangeListeners 的AdaptedSourceViewer 等)

与打开一个独立的 CEditor 相比,我发现我的编辑器没有关闭(参见 WorkbenchPage->closeEditor 方法),因为它的站点是一个 PartSite(MultiPageEditorPart 默认为其页面创建一个 MultiPageEditorSite)。

我将 CEditor 页面的编辑器站点更改为 EditorSite。之后编辑器不再泄漏,但由于另一个对象仍在泄漏,它仍然没有正确关闭。此外,keyBinding 不再起作用。仍在尝试使此解决方案发挥作用,但正确的方法似乎很复杂。

我错过了什么吗?将编辑器添加为页面应该不会引起这么多问题。

4

0 回答 0