我想在 C# 程序中嵌入一些预先计算的数据。我目前的方法是将数据简单地存储在一个数组中,如下所示:
int[] someData = new int[] { 1, 2, 3, 4 };
我的问题如下:说 someData 包含 4kB 的信息。这 4kB 存储在可执行文件中并占用内存。但是,一旦执行了数组初始化,数据就会被复制到堆中——所需的空间增加了一倍。这是一种浪费,因为我永远不会写入这个数组,所以我也可以直接从程序二进制文件中获取我想要的数据。
将数组声明为只读字段无济于事:这只会使数组指针只读,并且不会阻止数据的复制(或写入数组,就此而言)。您不能将数组声明为 const。
有什么方法可以防止复制并直接从程序二进制文件中访问数据?
这是一个编程竞赛,程序通过运行数千次来测试(通过创建那么多进程——我的程序没有得到一个包含许多测试用例的整洁文件,它为每个用例执行一次)。数组初始化占用了 90% 的时间,因为数组的内容必须从可执行程序复制到堆中。这似乎是在浪费时间,所以我想找到一种方法来避免复制并直接从程序二进制文件中读取数据。我想要完成的最好是这样表示(在伪汇编程序中):
jump to location 1002
...1000 words of data...
do a binary search on data from location 2 to 1001