那么,我必须调试内存分配问题。随着时间的推移,应用程序内存不足。我需要为.net窗口应用程序模拟低内存系统,以此更快速地重现内存不足问题。如何模拟.net应用程序的低内存?
PS:我最初的调查表明,应用程序分配非托管资源(托管DX)时发生内存泄漏。
那么,我必须调试内存分配问题。随着时间的推移,应用程序内存不足。我需要为.net窗口应用程序模拟低内存系统,以此更快速地重现内存不足问题。如何模拟.net应用程序的低内存?
PS:我最初的调查表明,应用程序分配非托管资源(托管DX)时发生内存泄漏。
写另一个程序,所有分配系统内存:)
另外,调试在虚拟机与低内存的
另外,我建议你使用.NET探查这样你就可以检查你的程序的哪个区域正在分配更多的内存。
如果应用程序运行内存不足访问非托管资源,那很可能是内存泄漏。在低内存环境中运行应用程序不会直接帮助您诊断问题,它会发生得更快。
您需要剖析应用程序的内存使用情况,以确定如何分配内存并查找泄漏。普通的分析工具将无法帮助,因为非托管代码不会被分析。您必须通过内存监控应用程序获得创意。
static volatile byte[] wasted; //volatile to avoid any compiler cleverness "saving" us!
static void Main(string[] args)
{
wasted = new byte[1024 * 1024 * 1024];//waste a gig!
}
在您的应用上运行Application Verifier也是值得的。
AppVerifier是做这件事的最佳方式 –
是的,我会直接为此。当然,OP有可能已经做到了,并且没有任何快乐。 –
AppVerifier是否适用于.Net Windows应用程序? – Trainee4Life
内存不足异常通常并不意味着实际用完了物理内存,而是用尽了虚拟内存地址空间。 – svick