2011-12-22 5 views
4

C#の大きなクラスライブラリ-dllから単一のメソッドを使いたいと思います。単一のメソッドの大きなDLLを参照する

パフォーマンスなどの欠点はありますか?
リフレクションツールを使用してメソッドコードを「読み込み」、それをコピーして自分のプロジェクトに貼り付ける必要がありますか?

アップデート:ハードディスクの空き容量は問題ありません。私のアプリケーションはWebアプリケーションです。

+0

それは主にディスクスペースを浪費しています... – Adam

+0

これは、このライブラリの他のコードにどのような依存関係がありますか?実行時のパフォーマンスはバインド時にわずかに影響を受けますが、配備コストも考慮する必要があります。もちろん、これがオープンソースでない場合、コードを "読む"ことは盗難と解釈される可能性があります... lol –

+0

ソースコードを取得するためにアセンブリを反映させる必要がある場合は、おそらくコピーする権利がありません。それはアプリケーションにパフォーマンスの影響があるかどうかよりも大きな考慮事項になります。 –

答えて

7

パフォーマンスやその他の点で欠点はありますか?

実際に重要な唯一のものは、あなたにとって重要な場合は、配布可能なサイズです。 (ユーザーは2 MBの代わりに30 MBのファイルをダウンロードします)。パフォーマンスの差はごくわずかです。アセンブリのバインドとStrong Name(署名されている場合)ハッシュの検証には時間がかかりますが、ユーザーにとっては目立たないようです。

リフレクションツールを使用してメソッドコードを「読み込み」、コピーしてプロジェクトに貼り付ける必要がありますか?

おそらくそうではありません。ほとんどのライセンス条項は、リバースエンジニアリングや部分的な配布のみを禁止しています。ライセンスがあればそれをチェックし、最初にそれを行うことができるかどうかを確認します。

+0

スタートアップにはパフォーマンス上の影響があります(このシナリオでは重要ではないかもしれません)。特定のメソッドだけがJITされていても、DLL全体をメモリにロードする必要があります。 – krolth

3

いいえ、それをJITコンパイラに任せてください。 ILが実際にマシンコードに変換されるのはすでに選択的です。実際に実行されるものだけをコンパイルします。あなたは仮想メモリアドレス空間のビットを失うだろうが、それは何の費用もかからない、それは仮想だ。あなたはあなたが使用していないものを支払うことはありません。

1

コストは、ディスク容量、読み込み時間、およびメモリフットプリントです。 JITコンパイラはあなたが呼び出したものだけをコンパイルします(これに注意することもありますが、アセンブリ全体をコンパイルすることはありません)。あなたが必要とする方法を「裂く」のはあなたの価値があるかどうかをあなたの呼び出しです。もちろん、これはウサギの穴である可能性があることを覚えておいてください。このメソッドはアセンブリ内で他のクラスを使用する可能性が高いので、必要なコードを抽出すると思うほど簡単ではないかもしれません。

1

バー、極端な場合には極端なハッキングが必要です。メソッドコードをコピーする(可能な場合)極端なハッキングです。

  1. 不必要なメモリを使用するだけの不満があっても、基本的には手頃な価格のソリューションです。シンプルで簡単。

  2. がメモリの問題があり、この方法は、(頻繁がプロジェクトに依存しているもの)、あまりにも頻繁に呼び出されていない場合は、外部AppDomainでそれをロードするためにを試してみて、そのドメインを一度あなたをアンロードすることができますそれで終わった。この場合、IPC管理を担当する必要があります。この世界では何も無料ではありません。

  3. tryあなたが書いたことをしてください。 User Reflector(または同様のソフトウェア)を使用して、C#コードのメソッドを取得し、そのクローンを作成します。これは、メソッドがDLLの内部の構造や状態などを使用しないと仮定した場合、その場合ストーリーはかなり複雑になります。

幸運。

関連する問題