私はリソースとして複数のファイルを追加した.NETアセンブリを持っています(バイナリ、各500KB以上)。私は以前、自動生成されたResources
クラスのResourceManager.GetObject()
メソッドを使用してこれらにアクセスしました。これはbyte[]
を返します。リソースとして追加されたファイルのバイト[]ではなくMemoryStream?
パフォーマンスと構文上の理由から、バイト配列の代わりにストリームとしてこれらのバイナリリソースを操作したいと考えています。私は、手動で.resxファイルを編集し、<value>
要素のクラス名をSystem.Byte[]
からSystem.IO.MemoryStream
に変更することで、ResourceManager.GetStream()
メソッドを使用してストリームとしてリソースに正常にアクセスできることがわかりました。
<data name="MyFile" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\MyFile.ext;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
は次のようになります。
<data name="MyFile" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\MyFile.ext;System.IO.MemoryStream, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
このアプローチの唯一の欠点は、Visual Studioは常にbyte[]
形で新しいファイルリソースを追加することです。タイプをMemoryStream
に設定する方法がありますか?
あなたのアプローチを使用すると、ストリーム全体が生成されて返される前に、byte []全体がメモリに読み込まれることになります。これが、私が 'GetObject'の代わりに' GetStream'を呼び出せることを望んでいた理由です。ファイル全体を最初にメモリに読み込まないようにします。 –
私はそれを持っていると思っていましたが、もう少し詳しく作業する必要があります。私はあなたのために何かを持っているときに更新します。 –
私の答えを更新しました。要するに、ResourceManagerでフットプリントを回避することはできません。 –