Description
Reproducible in vscode.dev or in VS Code Desktop?
- Not reproducible in vscode.dev or VS Code Desktop
Reproducible in the monaco editor playground?
- Not reproducible in the monaco editor playground
Monaco Editor Playground Link
No response
Monaco Editor Playground Code
No response
Reproduction Steps
I wrote a small application demonstrating the issue:
You can find it on the following link: https://zd9n67.csb.app/
Code: https://codesandbox.io/p/sandbox/react-typescript-forked-zd9n67
Actual (Problematic) Behavior
Diff editor does not dispose correctly after being removed from the dom.
The regular editor component does not have this issue.
The memory constantly grows as the diff editor is not properly disposed of. Form my investigation I could see that the Emitter
and InteractionEmitter
are constantly growing without being disposed in the monaco-editor/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js
file.
Also a lot of detached canvas dom elements like:
<canvas class="original diffOverviewRuler" ...
Expected Behavior
Diff editor gets removed properly and does not cause a memory leak.
Additional Context
We started observing the issue in the 0.44.0
version of monaco-editor
as the earlier versions don't seem to have this problem. The example is for the latest version 0.51.0
Activity
alexanderwu-db commentedon Aug 27, 2024
Probably would be a good idea to write a unit test in the monaco editor library to test against memory leaks in the future?
samirzubi-db commentedon Oct 7, 2024
I've submitted a fix in the vscode repo in case anyone needs to fix this in their codebase.
O10J commentedon May 30, 2025
I'm not sure if this is directly related to a bug, but I encountered a strange behavior when switching from a DiffEditor to a regular Editor.
After disposing a DiffEditor and then creating a regular Editor, the arrow keys (← →) start moving the cursor two characters instead of one.
Here's a minimal example to reproduce the issue. Please try it in the Monaco Playground: