事前に計算されたデータをC#プログラムに埋め込みたい。私の現在のアプローチは、次のようにデータを配列に単純に格納することです。
int[] someData = new int[] { 1, 2, 3, 4 };
私の問題は次のとおりです。someDataに4kBの情報が含まれているとします。この4kBは実行可能ファイル内に格納され、メモリを消費します。ただし、配列の初期化が実行されると、データはヒープにコピーされ、必要なスペースが2倍になります。この配列に書き込むことは決してないので、これは無駄です。したがって、プログラムバイナリから直接必要なデータを取得することもできます。
配列を読み取り専用フィールドとして宣言しても役に立ちません。これにより、配列ポインターが読み取り専用になり、データのコピー(または配列への書き込み)が妨げられることはありません。配列をconstとして宣言することはできません。
コピーを防ぎ、プログラムバイナリから直接データにアクセスする方法はありますか?
これは、プログラムを何千回も実行してテストするプログラミングコンテスト用です(その数のプロセスを作成することによって、私のプログラムには多くのテストケースを含むきちんとしたファイルが与えられず、ケースごとに1回実行されます)。配列の内容をプログラム実行可能ファイルからヒープにコピーする必要があるため、配列の初期化には90%の時間がかかります。これは時間の無駄のように思われるので、コピーを回避し、プログラムバイナリから直接データを読み取る方法を見つけたいと思います。私が達成しようとしていることは、そのように最もよく表されます(疑似アセンブラーで):
jump to location 1002
...1000 words of data...
do a binary search on data from location 2 to 1001