Abbiamo un grande progetto scritto principalmente in C# (servizi, multithreading ecc.). Tuttavia, gli algoritmi di crunch del core number sono scritti in C++ non gestito per essere veloci (OpenMP ecc.).Utilizzare le proprietà C# nel codice C++ non gestito
Purtroppo, al momento dobbiamo fare un grande sforzo per scambiare dati tra questi due mondi. Ad esempio, dobbiamo scrivere classi di wrapping in C++/CLI per ciascuna delle classi C++. Per (praticamente) qualsiasi impostazione richiesta (Proprietà) nel C# - "mondo" c'è una copia nel mondo C++ (un file di intestazione) e una conversione esplicita avanti e indietro nella classe wrapper. Questa architettura sembra molto inefficiente e abbastanza soggetta a errori.
domanda primaria: C'è un modo per condividere un C# -class con proprietà in qualche modo automaticamente in C++ non gestito? (dobbiamo leggere e scrivere!)
Domanda secondaria: Puoi fornire qualche consiglio su come migliorare l'architettura in un caso come descritto sopra. Una nostra considerazione è stata quella di passare completamente al C++, ma trovare le librerie appropriate e scrivere codice pulito per tutte le cose (di sistema) che facciamo in .NET al momento non si sentono bene.
Molte grazie per il vostro aiuto e saluti, Jakob
Hai verificato che scrivere gli algoritmi in C# è un collo di bottiglia? C# 4.0 ha un buon supporto per lo sviluppo parallelo ora. – Nick
No, non l'abbiamo ancora fatto, e hai ragione: dovremmo fare un tentativo per essere sicuri di questo punto. Ma poiché ci affidiamo a particolari proprietà del caching della memoria e simili, dubito davvero che l'algoritmo funzioni con una velocità simile nel CLR. –
Cosa ne pensi di [Protocol Buffers] (http://code.google.com/p/protobuf/)? C'è la possibilità di usarlo insieme a C# usando [protobuf-net] (http://code.google.com/p/protobuf-net/). – megabyte1024