मैं कचरा संग्रहण दबाव से बचने के लिए इनलाइन फ़ंक्शन का उपयोग करता हूं, विशेष रूप से लंबे समय तक चलने वाले तरीकों से निपटने के लिए। कहते हैं कि किसी दिए गए टिकर प्रतीक के लिए 2 साल या बाजार का डेटा प्राप्त करना चाहते हैं। इसके अलावा, अगर किसी को जरूरत हो तो बहुत सारी कार्यक्षमता और व्यावसायिक तर्क पैक कर सकते हैं।
क्या करता है एक सर्वर के लिए एक सॉकेट कनेक्शन खुला है और एक घटना के लिए एक घटना बाध्यकारी डेटा पर पाश। कोई इसे उसी तरह से सोच सकता है जिस तरह एक वर्ग को डिज़ाइन किया गया है, केवल एक ही जगह पर सहायक तरीके नहीं लिख रहा है जो वास्तव में केवल कार्यक्षमता के एक पाइस के लिए काम कर रहे हैं। नीचे कुछ नमूने हैं कि यह कैसे दिख सकता है, कृपया ध्यान दें कि मैं चर का उपयोग कर रहा हूं और "सहायक" विधियां अंत में नीचे हैं। अंत में मैं अच्छी तरह से इवेंट हैंडलर्स को हटा देता हूं, अगर मेरा एक्सचेंज क्लास बाहरी / इंजेक्शन होगा तो मेरे पास कोई भी लंबित इवेंट हैंडलर रजिस्टर्ड नहीं होगा
void List<HistoricalData> RequestData(Ticker ticker, TimeSpan timeout)
{
var socket= new Exchange(ticker);
bool done=false;
socket.OnData += _onData;
socket.OnDone += _onDone;
var request= NextRequestNr();
var result = new List<HistoricalData>();
var start= DateTime.Now;
socket.RequestHistoricalData(requestId:request:days:1);
try
{
while(!done)
{ //stop when take to long….
if((DateTime.Now-start)>timeout)
break;
}
return result;
}finally
{
socket.OnData-=_onData;
socket.OnDone-= _onDone;
}
void _OnData(object sender, HistoricalData data)
{
_result.Add(data);
}
void _onDone(object sender, EndEventArgs args)
{
if(args.ReqId==request )
done=true;
}
}
आप नीचे दिए गए लाभों को देख सकते हैं, यहां आप एक नमूना कार्यान्वयन देख सकते हैं। आशा है कि लाभ समझाने में मदद करता है।