これは、質問で言及したのと同じC#データベースプロジェクトに関連していると思います。
書き込みレイヤー全体をC/C++またはその他の言語で実装することは技術的に可能です。そして、C#で他のすべてを持つことは技術的に可能です。私は現在、いくつかの高性能で低レベルのものにアンマネージコードを使用し、ビジネスロジックと上位レベルの管理にC#を使用するアプリケーションに取り組んでいます。
ただし、タスクの複雑さを過小評価してはなりません。これを行う一般的な方法は、両方の当事者が理解できる契約を設計することです。コントラクトは管理対象言語に公開され、管理対象言語はネイティブアプリケーションへの呼び出しをトリガーします。C#からC ++メソッドを呼び出そうとしたことがあれば、そのアイデアが得られます...さらに、アンマネージコードを呼び出すたびに、パフォーマンスのオーバーヘッドが非常に大きくなり、低レベルのパフォーマンスのアイデア全体が失われる可能性があります。
高性能のリレーショナルデータベースに本当に興味がある場合は、単一の低水準言語を使用してください。
素朴でありながら完全に機能するデータベースの実装が必要な場合は、C#を使用してください。複雑さを完全に理解していない限り、これら2つの言語を混在させないでください。Raven DBを参照してください-C#のみで完全に構築されたドキュメントベースのNoSQLデータベース。
アンマネージドC#コードはILにコンパイルされ、CLRで実行されますか?
いいえ、管理されていないC#などはありません。C#コードは常にILコードにコンパイルされ、CLRによって実行されます。これは、マネージコードがアンマネージコードを呼び出す場合です。アンマネージコードは、C / C ++ / Assemblyなどのいくつかの言語で実装できますが、CLRはそのコードで何が起こっているのかわかりません。
コメントから更新します。C#をネイティブアーキテクチャ固有のコードに直接コンパイルできるツール(ngen.exe)があります。このツールは、JITコンパイル段階を削除し、ネイティブコードを実行可能イメージまたはライブラリに直接配置することにより、管理対象アプリケーションのパフォーマンスを向上させるように設計されています。ただし、このコードは引き続きCLRホストによって「管理」されます。メモリの割り当てと収集、管理されたスレッド、アプリケーションドメイン、例外処理、セキュリティ、およびその他すべての側面は、CLRによって引き続き制御されます。したがって、C#は技術的にネイティブコードにコンパイルできますが、このコードはスタンドアロンのネイティブイメージとして実行されていません。
これはどのように作動しますか?
マネージコードは、アンマネージコードと相互運用します。これを行うには、いくつかの方法があります。
- .NetInteropを介したコードを介して。これは比較的高速ですが、コードでは少し見苦しいように見えます(さらに、保守/テストが困難です)(C#/ C / Assemblyサンプルを含む優れた記事)
- はるかに遅いアプローチですが、他の言語に対してよりオープンです:Webサービス(SOAP、WS、REST、および会社)、キューイング(MSMQ、NServiceBusなど)、また(おそらく)プロセス間通信。したがって、アンマネージドプロセスは一方の端にあり、マネージドアプリケーションはもう一方の端にあります。