fix(infra): memory leak (#9013)

This commit is contained in:
EYHN
2024-12-16 16:55:49 +00:00
parent 55f1cc4b1e
commit b36b398957
30 changed files with 399 additions and 135 deletions

View File

@@ -48,16 +48,16 @@ export class EventBus {
this.listeners[event.id].push(listener);
const off = this.parent?.on(event, listener);
return () => {
this.off(event, listener);
off?.();
this.off(event.id, listener);
};
}
off<T>(event: FrameworkEvent<T>, listener: (event: T) => void) {
if (!this.listeners[event.id]) {
private off(eventId: string, listener: (event: any) => void) {
if (!this.listeners[eventId]) {
return;
}
this.listeners[event.id] = this.listeners[event.id].filter(
this.listeners[eventId] = this.listeners[eventId].filter(
l => l !== listener
);
}
@@ -76,6 +76,15 @@ export class EventBus {
}
});
}
dispose(): void {
for (const eventId of Object.keys(this.listeners)) {
for (const listener of this.listeners[eventId]) {
this.parent?.off(eventId, listener);
}
}
this.listeners = {};
}
}
interface EventHandler {

View File

@@ -130,6 +130,7 @@ export class ComponentCachePool {
}
}
}
this.cache.clear();
}
[Symbol.dispose]() {
@@ -318,5 +319,6 @@ export class BasicFrameworkProvider extends FrameworkProvider {
}
this.disposed = true;
this.cache.dispose();
this.eventBus.dispose();
}
}