클라이언트 연결을 허용하는 SignalR이 포함 된 .NET Core 백엔드가 있습니다. 모든 연결에서 소위 "스케줄러"가 생성되고 사전에 저장됩니다. 연결이 닫히면이 스케줄러 개체가 목록에서 제거됩니다.
이제 이러한 스케줄러 개체에 대해 다음과 같은 개체 속성에 대한 CollectionChanged 처리기를 설정했습니다.
...
scheduler.Grades.CollectionChanged += (s, e) => this.GradesListener(s, e, connectionId);
scheduler.Raws.CollectionChanged += (s, e) => this.MaterialsListener(s, e, connectionId);
scheduler.Heats.CollectionChanged += (s, e) => this.HeatsListener(s, e, connectionId);
...
응용 프로그램에 메모리 누수가 있기 때문에 내 질문은 다음과 같습니다. 사전에서 스케줄러를 제거하면 (과 함께 수행 Dictionary.Remove(key)
) 이벤트 리스너도 제거됩니까? 속성 (Grades, Raws, Heats ...)도 삭제 될 것이기 때문에 그렇게 생각할 것입니다. 그렇죠?
핸들러가 자동으로 제거되지 않으면 어떻게 "등록 취소"합니까?
더 많은 코드를 제공해야하는지 알려주세요.
이전에 이런 질문을했다면 미안하지만 답을 찾을 수 없었습니다.
맞습니다. Grades, Raws 및 Heats에서 항목을 제거하면 GC가 메모리를 잘 정리합니다.
문제는 제거 할 때까지 this
인스턴스를 정리할 수 없다는 것입니다.
여기에서 메모리 누수를 방지하는 방법에 대한 자세한 정보를 찾을 수 있습니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다