2012-04-04 10 views
5

में सी # गुणों का उपयोग करें हमारे पास मुख्य रूप से सी # (सेवाओं, मल्टीथ्रेडिंग इत्यादि) में लिखी गई एक बड़ी परियोजना है। हालांकि, कोर संख्या क्रंचिंग एल्गोरिदम अप्रबंधित सी ++ में तेजी से (ओपनएमपी इत्यादि) में लिखे गए हैं।अप्रबंधित सी ++ कोड

दुर्भाग्यवश, इस समय हमें इन दोनों दुनिया के बीच डेटा का आदान-प्रदान करने के लिए बहुत मेहनत करनी है। यानी, हमें प्रत्येक सी ++ कक्षाओं के लिए सी ++/सीएलआई में रैपिंग कक्षाएं लिखनी होंगी। सी (- दुनिया) में किसी भी आवश्यक सेटिंग (गुण) के लिए (वर्चुअल) सी ++ दुनिया (एक हेडर फ़ाइल) में एक प्रतिलिपि है और रैपर वर्ग में आगे और पीछे एक स्पष्ट रूपांतरण है। यह वास्तुकला बहुत अक्षम और काफी त्रुटि-प्रवण प्रतीत होता है।

प्राथमिक प्रश्न: क्या सी #-क्लास को किसी भी तरह से अप्रबंधित C++ में स्वचालित रूप से गुणों के साथ साझा करने का कोई तरीका है? (हमें पढ़ना और लिखना है!)

माध्यमिक प्रश्न: क्या आप उपरोक्त वर्णित मामले में आर्किटेक्चर को बेहतर बनाने के बारे में कोई सलाह दे सकते हैं। हमारा एक विचार पूरी तरह से सी ++ पर स्विच करना था, लेकिन उचित पुस्तकालयों को ढूंढना और सभी (सिस्टम-) चीजों के लिए स्वच्छ कोड लिखना, इस समय .NET में हम जो करते हैं वह अच्छा नहीं लगता है।

आपकी मदद और सादर, जेकब के लिए बहुत-बहुत धन्यवाद

+0

क्या आपने सत्यापित किया है कि सी # में एल्गोरिदम लिखना एक बाधा है? सी # 4.0 में समानांतर विकास के लिए अब अच्छा समर्थन है। – Nick

+0

नहीं, हमने अभी तक यह नहीं किया है, और आप सही हैं: हमें इसे इस बिंदु के बारे में सुनिश्चित करने का प्रयास करना चाहिए। लेकिन जैसा कि हम मेमोरी कैशिंग के विशेष गुणों पर भरोसा करते हैं और जैसा कि मुझे सच में संदेह है कि एल्गोरिदम सीएलआर में समान गति से चलेंगे। –

+2

कैसे [प्रोटोकॉल बफर] (http://code.google.com/p/protobuf/) के बारे में? [Protobuf-net] (http://code.google.com/p/protobuf-net/) का उपयोग कर सी # के साथ इसे एक साथ उपयोग करने की क्षमता है। – megabyte1024

उत्तर

1

मैं अपने काम पर इसी तरह के मुद्दों जहाँ मेरे प्राथमिक कार्य कुछ उच्च perfromance, कम विलंबता DLLs में कामयाब इंटरफेस लिखने के लिए है के साथ काम कर रहा हूँ, इस साधारण मामलों शामिल जहां मुझे मूल कक्षा में कच्चे सूचक या अधिक जटिल मुद्दों वाले मूल सी ++/क्ली का उपयोग करके मूल वर्गों को लपेटना होता है, जहां मूल कोड सर्वर साइड प्रकाशक होता है और प्रबंधित कोड को प्रतिनिधियों का उपयोग करके इसका सब्सक्राइब करना पड़ता है यानी उन्हें होना चाहिए देशी कॉलबैक में परिवर्तित हुड के नीचे .NET एक परिष्कृत COM सर्वर है जहां तक ​​मुझे पता है। कॉमविज़िबल विशेषता के साथ .NET असेंबली लिखना संभव है, फिर यह क्लासिक COM घटक के रूप में कार्य करता है और फिर इसे COM घटक के रूप में मूल C++ कोड से उपयोग करना संभव है। प्रबंधित से मूल कोड का उपयोग करने के लिए रिवर्स डीएलआईएमपोर्ट विशेषताओं का उपयोग करके हासिल किया जा सकता है और सभी मार्शलिंग को स्ट्रक्चरलेआउट एट्रिब्यूट (http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.structlayoutattribute.aspx) और मार्शलएएएट्रिब्यूट (http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshalasattribute.aspx) जैसे विभिन्न विशेषताओं द्वारा ठीक से ट्यून किया जा सकता है। मैं कभी-कभी असुरक्षित कीवर्ड का भी उपयोग कर रहा हूं भी। मुझे उच्च प्रदर्शन कोड से निपटना होगा, इसलिए कुछ मामलों में यह है कि प्रोफाइलिंग के बाद मुझे पता है कि सबसे अच्छा समाधान कौन सा है। चाहे वह warpper वर्ग समाधान है कि आप का उल्लेख किया है या क्लासिक कॉम तरह से, या कुछ कैशिंग के साथ संकर किसी तरह का, वस्तु पूलिंग आदि

आशा है कि मदद करता है। :)

क्षमा करें अगर यह थोड़ा असंगठित दिखता है। यह बहुत देर हो चुकी है। :)

+0

अपने जवाब के लिए धन्यवाद - मैं पहले से ही Marhsal.StructToPtr और साथियों का उपयोग कर हमारे आवरण कोड का एक बहुत साफ है, और मैं भी आगे दोनों में सी # और देशी सी ++ दुनिया C++/CLI घटकों का उपयोग करके प्राप्त करने के लिए आशा है कि ... –

+0

धन्यवाद जेकब एस – ervinbosenbacher

संबंधित मुद्दे