C+中的内存不足异常+/C#XAML Windows Phone Silverlight 8.1应用程序中使用的CX库

C+中的内存不足异常+/C#XAML Windows Phone Silverlight 8.1应用程序中使用的CX库,c#,xaml,garbage-collection,out-of-memory,c++-cx,C#,Xaml,Garbage Collection,Out Of Memory,C++ Cx,我们有一个C#XAML Windows Phone Silverlight 8.1应用程序。 此应用程序使用用C++/CX实现的DLL。 此DLL正在为缓冲区分配内存(可以大于32MB) 当C#的垃圾收集速度变慢以释放未使用的内存时,有时会在C++/cx DLL中出现内存不足异常 如何处理这种情况?我们有足够的内存,但垃圾收集员似乎懒得尽早完成工作。这可能是由许多不同的原因造成的。WP8.1应用程序在低端手机上的容量限制为185MB,因此任何超出此限制的应用程序都会触发OOM异常。目前的问题是没

我们有一个C#XAML Windows Phone Silverlight 8.1应用程序。 此应用程序使用用C++/CX实现的DLL。 此DLL正在为缓冲区分配内存(可以大于32MB)

当C#的垃圾收集速度变慢以释放未使用的内存时,有时会在C++/cx DLL中出现内存不足异常


如何处理这种情况?我们有足够的内存,但垃圾收集员似乎懒得尽早完成工作。

这可能是由许多不同的原因造成的。WP8.1应用程序在低端手机上的容量限制为185MB,因此任何超出此限制的应用程序都会触发OOM异常。目前的问题是没有足够的数据来说明如何使用内存和期望的目标。你是对的。由于185MB的限制,此OOM异常即将出现。垃圾收集器等待很长时间才能释放未使用的内存。在这个时间点,我们的C++ DLL分配内存,我们在C++端得到一个OOM异常。不知何故,GC应该考虑在这个C++ DLL中有非托管内存分配。处理这个问题的正确方法是什么?有问题的分配是在本机代码中完成的吗?是的,它是在本机代码中完成的。但老实说,我们也看到了C#端的问题。在那里,我们还分配了大量可写位图。GC也可能会在释放已经未使用的可写位图和触发OOM异常方面变慢。基本上,用户与应用程序的交互会迫使我们在一个2秒的循环中分配和释放可写位图和本机缓冲区。我们尝试使用GC。收集(在C边)和GC.AddiMeMyPress(从C++侧触发)来解决这个问题。但我们真的不知道如何使模式正确。