我正在尝试在托管(C#)和非托管(C ++ Win32)代码之间来回移动数据。我可以使用Marshal.Copy
,它可以正常工作,直到数据集变得更大> 2GB作为Marshal.Copy
具有签名的32位int(2GB)长度限制。
知道怎么解决这个问题吗?目前,我在托管端使用AllocHGlobal(IntPtr)
,在非托管端使用.ToPointer()
。如果我无法使用Marshal.Copy
来回移动大数据(> 2GB)我可以使用哪些内容?
答案 0 :(得分:2)
我的第一反应是:为什么要复制2GB +的数据?
也许您的应用程序限制不允许它,但在我看来,如果您的数据集大于框架所允许的数据集,那么您不应该寻找绕过框架的技巧。另一种访问方法怎么样?
有很多方法可以解决这个问题。对于初学者,您可以将内存包装在流中并将数据拉入非托管代码。您还可以创建自己的界面,以便将数据整合到一起。内存映射文件也会浮现在脑海中。
在不知道应用程序的具体约束的情况下,也许你无法改变非托管代码,我建议找另一种方法而不是解决框架。