कम विलंबता HFT
एप्लिकेशन में मेरे पास शेयर बाजार डेटा युक्त Byte[]
संदेश प्राप्त करने वाले सॉकेट हैं।.NET में डबल रूपांतरण (बाइट [] को स्ट्रिंग करने के लिए) से बचने का तरीका?
विक्रेता प्रोटोकॉल स्टॉक मूल्य फ़ील्ड में Byte[]
ASCII
वर्ण अनुक्रम युक्त हैं।
आईई। बाइट अनुक्रम [51-51-46-56] एएससीआई वर्णों से मेल खाता है [3-3 -.- 8], 33.8 संख्या के बराबर है।
असल में संदेश पार्सिंग के दौरान मैं Byte[]
स्ट्रिंग करने के लिए कनवर्ट करता हूं और फिर सिंगल/फ्लोट पर स्ट्रिंग करता हूं।
क्या ऐसे डबल रूपांतरण से बचने और सीधे Byte[]
को एकल/फ्लोट में परिवर्तित करने का कोई तरीका है?
दूसरी बात यह है कि स्ट्रिंग प्रकार के उपयोग से बचने का कोई तरीका है जो नेट में अक्षम है (अपरिवर्तनीय-कचरा संग्रहण प्रवण)?
अग्रिम धन्यवाद।
सादर
पहला, यह कौन सा प्रोटोकॉल है? उपलब्ध पुस्तकालयों में से एक का उपयोग क्यों नहीं करें उदाहरण के लिए FIX? दूसरा, क्या आप नमूना मूल्यों के बारे में निश्चित हैं? 3 के लिए ASCII कोड 51 है, 53 नहीं। # 46 डॉट है। FIX जैसे प्रोटोकॉल ASCII वर्ण भेजते हैं, आपकी सरणी * पहले से ही एक स्ट्रिंग हो सकती है। आप बीसीडी नंबर प्राप्त करने के लिए कुछ ट्रांसफॉर्म का उपयोग कर सकते हैं, उदाहरण के लिए वास्तविक अंक प्राप्त करने के लिए 48 घटाएं, फिर पूर्णांक प्राप्त करने के लिए कुछ बिट स्थानांतरण का उपयोग करें, स्केल सूचक के रूप में 46 की स्थिति का उपयोग करें। अंत में, * कभी भी * वित्तीय लेनदेन के लिए फ्लोट या डबल का उपयोग न करें - वे स्केलिंग त्रुटियों के अधीन हैं। जहां भी संभव हो वहां 'दशमलव' का प्रयोग करें –
क्या आप वाकई यह रूपांतरण एक सार्थक समय लेते हैं? मुझे लगता है कि सॉकेट पढ़ने 100x महंगा है। – usr
एचएफटी में @usr फाइबर मामलों की लंबाई भी। उस ने कहा, समग्र पार्सिंग प्रदर्शन अलग-अलग टोकन –