IEnumerable
이 IObservable
과 어떻게 다른지 궁금합니다. 나는 pull과 push 패턴을 각각 이해하지만 C#은 메모리 등에서 가입자에게 (IObservable의 경우) 처리 할 메모리의 다음 비트 데이터를 받아야한다고 어떻게 알 립니 까? 관찰 된 인스턴스는 구독자에게 푸시 할 데이터가 변경되었음을 어떻게 알 수 있습니까?IEnumerable과 IObservable의 차이점은 무엇입니까?
제 질문은 파일에서 줄을 읽는 중 테스트에서 온 것입니다. 파일은 총 6Mb 정도였습니다.
표준 시간 촬영 : 4.7s, 선 : 36,587
수신 시간 촬영 : 0.68s, 선 :
36587 어떻게 대규모 파일의 각 라인을 통해 정상 반복을 향상시킬 수 수신입니다 ?
private static void ReadStandardFile()
{
var timer = Stopwatch.StartNew();
var linesProcessed = 0;
foreach (var l in ReadLines(new FileStream(_filePath, FileMode.Open)))
{
var s = l.Split(',');
linesProcessed++;
}
timer.Stop();
_log.DebugFormat("Standard Time Taken: {0}s, lines: {1}",
timer.Elapsed.ToString(), linesProcessed);
}
private static void ReadRxFile()
{
var timer = Stopwatch.StartNew();
var linesProcessed = 0;
var query = ReadLines(new FileStream(_filePath, FileMode.Open)).ToObservable();
using (query.Subscribe((line) =>
{
var s = line.Split(',');
linesProcessed++;
}));
timer.Stop();
_log.DebugFormat("Rx Time Taken: {0}s, lines: {1}",
timer.Elapsed.ToString(), linesProcessed);
}
private static IEnumerable<string> ReadLines(Stream stream)
{
using (StreamReader reader = new StreamReader(stream))
{
while (!reader.EndOfStream)
yield return reader.ReadLine();
}
}
이 애플리케이션을 벤치마킹 할 때 통화 순서를 변경하면 RX가 여전히 더 빠릅니까? – user7116
시간이 뒤 바뀌 었습니다! 어떤 종류의 최적화가 진행 중입니다! 사실, Rx는 느리게 작동합니다 (약 5 초). – David