我正在研究一个C#应用程序,我需要将一个指向相当大的数据(大约48 kB)的指针传递给非托管代码。数据以完全相同的格式存储在文件中,需要传递给非托管代码。
我已经知道我可以通过读取文件然后编组数据来获取指向数组的指针,如下所示,但我不想使用此解决方案。
const string filename = "file.bin";
int length = (int)(new System.IO.FileInfo(filename)).Length;
byte[] data = new byte[length];
IntPtr ptr;
using (System.IO.FileStream fs = System.IO.File.Open(filename, System.IO.FileMode.Open))
fs.Read(data, 0, length);
ptr = Marshal.AllocHGlobal(length);
Marshal.Copy(data, 0, ptr, length);
// Pass ptr to my unmanaged function
我不想使用上述代码的一个原因是非托管代码将保留指针并继续引用它,因此在关闭应用程序之前,我无法释放内存。
我的问题是:有更好的方法吗?理想情况下,我想将指针直接传递给文件数据(或者可能是托管内存流),这样我就不必复制数据或担心可能的内存泄漏。
谢谢!