Jac*_*ame 10 c# interop c#-4.0
我正在尝试在托管(C#)和非托管(C++ Win32)代码之间来回移动数据.我可以使用Marshal.Copy它,它可以正常工作,直到数据集变大> 2GB,Marshal.Copy因为长度的签名32位int(2GB)限制.
知道怎么解决这个问题吗?目前我AllocHGlobal(IntPtr)在托管端和.ToPointer()非托管端使用.如果我不能使用Marshal.Copy来回移动大数据(> 2GB)我可以使用什么?
我的第一反应是:为什么要复制 2GB 以上的数据?
也许您的应用程序限制不允许这样做,但在我看来,如果您的数据集大于框架允许的范围,您就不应该寻找绕过框架的技巧。另一种访问方法怎么样?
有很多方法可以解决这个问题。对于初学者,您可以将内存包装在流中并将数据拉入非托管代码中。您还可以创建自己的界面来将数据分成若干部分。内存映射文件也会出现在我的脑海中。
在不知道应用程序的具体约束的情况下,也许您无法更改非托管代码,我建议寻找另一种方法而不是围绕框架工作。
| 归档时间: |
|
| 查看次数: |
1036 次 |
| 最近记录: |