현재 FlowDocument 리소스를 릴리스 할 때 발생하는 문제를 해결하려고합니다. rtf 파일을로드하고 TextRange.Load와 함께 FlowDocument에 넣습니다. 나는이 작업을 수행 한 후 해당 리소스를 보유하고 GC가 수집하지 않는다는 것을 알았습니다. 나는 메모리 프로파일 러를 돌렸고 이것이 사실이라는 것을 알았다. 또한 FlowDocument에 rtf를 실제로로드 할 때까지 좁혔습니다. 그 일을하지 않으면 모든 것이 정상입니다. 그래서 이것이 이것이 문제라는 것을 압니다.C#의 FlowDocument 메모리 문제
이 문제를 어떻게 해결할 수 있는지에 대한 지침이 필요합니다. 다음은 rtf와 모든 것을로드하는 코드입니다. 나는 다른 모든 코드를 주석 처리했으며 GC.Collect()를 시도한 것 외에도 자체 범위에 넣었다. 어떤 도움이라도 대단히 감사합니다.
편집 : 여기에 내 코드가 가득 차 있습니다. 나는 그것을 실행하기 위해 벌거 벗은 본질을 제외하고는 다른 모든 것을 꺼냈다. 문제는 여전히 존재합니다. FlowDocument와 TextRange는 다른 곳에서는 참조되지 않습니다.
public LoadRTFWindow(string file)
{
InitializeComponent();
using (FileStream reader = new FileStream(file, FileMode.Open))
{
FlowDocument doc = new FlowDocument();
TextRange range = new TextRange(doc.ContentStart, doc.ContentEnd);
range.Load(reader, System.Windows.DataFormats.Rtf);
}
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
}
는 나는 내 문제를 해결 도움이 될 기대했다
this post를 발견하지만 난 그것으로 운이 없었다. 모든 유형의 도움을 크게 주시면 감사하겠습니다. 고맙습니다.
편집 : 나는 이것이 내가 점검하고있는 주요 방법을 언급해야한다. Windows 작업 관리자가 열려 있고 내 응용 프로그램의 프로세스가 사용하는 메모리 사용량을보고 있습니다. 위의 코드를 실행하면 TextRange.Load() (큰 400 페이지 RTF)를 수행하는 동안 응용 프로그램이 40,000K에서 70,000K로 이동하고 한 번 완료되면 61,000K로 떨어지고 거기에 머물러 있습니다. 내 기대는 그것이 40,000K로 떨어지거나 적어도 그것과 아주 근접 할 것이라는 것이다.
앞에서 언급 한 것처럼 메모리 프로파일 러를 사용하여 많은 양의 단락, 실행 ...이 있음을 확인했습니다. 개체는 여전히 살아 있습니다.
어디서나 부모를 언급하지 않습니다. 그래서 나는 FlowDocumentPageViewer가 내 문제라고 생각하지 않는다. 나는 원래 게시물에서 코드를 더 작성했다. – Jasson