मुझे उत्सुकता है कि कैसे IEnumerable
IObservable
से हुड के नीचे अलग है। मैं क्रमशः पुल और पुश पैटर्न को समझता हूं लेकिन सी #, स्मृति आदि के मामले में, ग्राहकों को सूचित करता है (IObservable के लिए) कि इसे प्रक्रिया में स्मृति के अगले डेटा को प्राप्त करने के लिए प्राप्त करना चाहिए? मनाए गए उदाहरण को कैसे पता चलता है कि ग्राहकों को धक्का देने के लिए डेटा में बदलाव आया है।iNumerable कैसे हुड के नीचे IObservable से भिन्न है?
मेरा प्रश्न एक परीक्षण से आता है जो मैं फ़ाइल से लाइनों में पढ़ रहा था। फाइल कुल में लगभग 6 एमबी थी।
मानक समय लिया गया: 4.7s, लाइनों: 36587
आरएक्स लिए गए समय: 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();
}
}
यदि आप इस एप्लिकेशन को बेंचमार्क करते समय अपनी कॉल का ऑर्डर स्विच करते हैं, तो क्या आरएक्स अभी भी तेज़ है? – user7116
टाइम्स उलटा हुआ है! कुछ प्रकार का अनुकूलन चल रहा है! वास्तव में, आरएक्स एक धीमा (लगभग 5 एस) चलाता है। – David