मैं संरचना में डबल लपेटकर माप इकाइयों प्रणाली को कॉल करने की कोशिश कर रहा हूं। मेरे पास मीटर, द्वितीय, डिग्री इत्यादि जैसे सी # संरचनाएं हैं। मेरा मूल विचार यह था कि कंपाइलर के बाद सबकुछ रेखांकित किया गया है, मेरे पास एक प्रदर्शन होगा जैसे कि डबल का उपयोग किया जाता था।माप की इकाइयों को व्यक्त करने के लिए सी # प्रकारों का उपयोग
मेरे स्पष्ट और निहित ऑपरेटर सरल और सीधा हैं, और कंपाइलर वास्तव में उन्हें इनलाइन करता है, फिर भी मीटर और सेकेंड वाला कोड डबल कोड का उपयोग करके एक ही कोड से 10 गुना धीमा है।
मेरा प्रश्न यह है कि क्यों नहीं सी # कंपाइलर दूसरे का उपयोग करके कोड को दोहरा कर कोड के रूप में इष्टतम के रूप में बना सकता है यदि यह सब कुछ इनलाइन करता है?
दूसरा निम्नलिखित के रूप में परिभाषित किया गया है:
struct Second
{
double _value; // no more fields.
public static Second operator + (Second left, Second right)
{
return left._value + right._value;
}
public static implicit Second operator (double value)
{
// This seems to be faster than having constructor :)
return new Second { _value = value };
}
// plenty of similar operators
}
अद्यतन:
यदि struct यहाँ फिट बैठता है मैं नहीं पूछा। ऐसा होता है।
मैंने नहीं पूछा कि कोड को रेखांकित किया जा रहा है या नहीं। जेआईटी इसे रेखांकित करता है।
मैंने रनटाइम में उत्सर्जित असेंबली ऑपरेशंस की जांच की। वे इस तरह कोड के लिए अलग अलग था:
var x = new double();
for (var i = 0; i < 1000000; i++)
{
x = x + 2;
// Many other simple operator calls here
}
और इस तरह:
var x = new Second();
for (var i = 0; i < 1000000; i++)
{
x = x + 2;
// Many other simple operator calls here
}
disassembly में कोई कॉल निर्देश थे, तो वास्तव में आपरेशन inlined रहे थे। फिर भी अंतर महत्वपूर्ण है। प्रदर्शन परीक्षण से पता चलता है कि दूसरा उपयोग करना डबल का उपयोग करने से 10 गुना धीमा है।
तो मेरे प्रश्न हैं (ध्यान!): ऊपर दिए गए मामलों के लिए जेआईटी जेनरेट आईए 64 कोड अलग क्यों है? स्ट्रक्चर को डबल के रूप में तेजी से चलाने के लिए क्या किया जा सकता है? ऐसा लगता है कि डबल और सेकेंड के बीच कोई सैद्धांतिक अंतर नहीं है, मैंने देखा अंतर का गहरा कारण क्या है?
क्या यह 'निहित' या '+' ऑपरेटर है? –
आपको इस संबंधित प्रश्न में रुचि हो सकती है: http://stackoverflow.com/questions/348853/units-of-measure-in-c-almost – Benjol
मुझे पता है कि आप सी # का उपयोग कर रहे हैं, लेकिन क्या आपने एफ # माना है? यह स्थिर इकाइयों की जांच में बनाया गया है जो आपको लगता है कि आप किस तरह की तलाश में हैं। Http://stackoverflow.com/questions/40845/how-do-f-units-of-measure-work –