파일에서 읽어 들이고 필터링되는 문자열 목록을 가지고 있습니다.이 모든 것은 yield 메커니즘을 사용하여 일어나기 때문에 게으르다. 그런 다음이를 TextReader를 사용하는 메서드로 전달해야합니다.IEnumerable 스트리밍
이 방법에 문제가 있습니까? 그것은 효과가있는 것처럼 보이지만 뭔가를 놓친 것을 알고 싶었습니다.
public class EnumerableReader : TextReader
{
private readonly IEnumerator<string> _enumerator;
public EnumerableReader(IEnumerable<string> lines)
{
_enumerator = lines.GetEnumerator();
}
public override string ReadLine()
{
return _enumerator.MoveNext() ? _enumerator.Current : null;
}
protected override void Dispose(bool disposing)
{
_enumerator.Dispose();
base.Dispose(disposing);
}
}
끝나면 IEnumerator을 '폐기'하는 것을 잊지 마십시오. –
dtb
@dtb 왜이 경우에는 _enumerator를 적극적으로 폐기하는 것이 필요하면 가비지 컬렉터가 처리하는 것보다 더 나은지 궁금하다. 메모리 소비? –
@SimonBelanger : 일반적으로 IDisposables *를 처리하기 때문에 *. 이 상황에서 IEnumerator는 파일에서 읽습니다. GC가 결국 파일을 닫을 때까지 파일을 열어 두지 않고 확정적으로 닫고 싶지는 않을 것입니다. – dtb