Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果事先分配了太多内存,P-invoke调用将失败_C#_.net_Wpf_Memory Management_Pinvoke - Fatal编程技术网

C# 如果事先分配了太多内存,P-invoke调用将失败

C# 如果事先分配了太多内存,P-invoke调用将失败,c#,.net,wpf,memory-management,pinvoke,C#,.net,Wpf,Memory Management,Pinvoke,我有一个对非托管DLL的p-invoke调用,该调用在我的WPF应用程序中失败,但在简单的启动WPF应用程序中没有。我试图找出问题所在,但最终得出结论,如果在打电话之前分配了太多内存,电话就会失败。我有两个独立的代码块,这两个代码块都可以自己成功,但如果都运行,就会导致失败。它们与p-invoke调用试图执行的操作无关 非托管库中的哪些问题会导致此类问题?我认为托管堆和非托管堆应该自动分离 据我所知,崩溃发生在一个动态加载的辅助DLL中,从一个p调用到另一个DLL。这可能与此有关吗?在没有太多信

我有一个对非托管DLL的p-invoke调用,该调用在我的WPF应用程序中失败,但在简单的启动WPF应用程序中没有。我试图找出问题所在,但最终得出结论,如果在打电话之前分配了太多内存,电话就会失败。我有两个独立的代码块,这两个代码块都可以自己成功,但如果都运行,就会导致失败。它们与p-invoke调用试图执行的操作无关

非托管库中的哪些问题会导致此类问题?我认为托管堆和非托管堆应该自动分离


据我所知,崩溃发生在一个动态加载的辅助DLL中,从一个p调用到另一个DLL。这可能与此有关吗?

在没有太多信息的情况下,在黑暗中拍摄

是否可能需要在特定的基址加载非托管DLL,并且当分配太多内存或加载其他程序集时,DLL无法在正确的地址加载


非托管代码容易损坏堆。这种损坏的副作用是非常不可预测的,这取决于损坏的内存之后会发生什么。如果腐败不在关键位置,就不会发生坏事,这并不罕见。更改程序的内存分配模式可以改变这种结果

您现在真正知道的是,非托管代码不可信。做点什么总是很难的,尤其是在托管主机程序中。除非您开始为非托管代码编写单元测试,使用非托管代码进行测试,并找到可以使用非托管调试器处理的可复制炸弹,否则您将一事无成