我现在正在使用非常讨厌的代码处理一些非常大的应用程序。问题是,应用程序的整个GUI不时冻结并停止响应(并且在一段时间后Windows希望将应用程序关闭)。我有一个非常大的问题,甚至看看调试应用程序的位置,主要是因为当这个事情发生并且我在VS调试器中暂停它时,它突出显示该行:
CardWindow.ShowDialog();
根本没有帮助。此外,当这件事发生时,它往往会增加内存中的应用程序大小,偶尔抛出OutOfMemoryException
。
我还检查了它是否在某个创建的线程中是某种无限循环,但是VS告诉我只有主线程是活动的,其余的都是结束的或者根本没有运行(线程实现是也写得很糟糕。)
应用程序使用本地网络中的远程对象,并且一些线程用于将照片和其他数据从客户端传输到服务器,但我不知道如何检查它是否是它导致的。但是当服务器应用程序挂起时,客户端仍然可以完全连接它。
该如何制作的简短信息:该应用程序使用Firebird引擎来存储其数据。数据库位于服务器计算机上,客户端使用标准Firebird C#库通过本地LAN连接到它,并且应用程序实例使用远程对象相互通信(服务器也是客户端)。
这是调试的第二周,我变得非常绝望,因为我已经忘记了如何检查什么是错的。错误随机出现的事实也无济于事。
有人能给我一些关于如何找到这个bug踪迹的想法吗?
在Visual Studio Ultimate 2013和Firebird 2.5中使用C#.NET 4.5
和WPF
答案 0 :(得分:1)
我建议使用分析工具来帮助找到问题
答案 1 :(得分:0)
除了@DerekTomes。 System.Windows.ShowDialog方法,描述于:Window.ShowDialog Method,所有其他窗口都被禁用,仅在窗口关闭时返回。检查以确保窗口最终关闭(在CardWindow.xaml.cs中的this.Close()或任何.cs文件)或使用CardWindow.Show()而不是CardWindow.ShowDialog()以便其他窗口在CardWindow时保持运行正在运行。
答案 2 :(得分:0)
我终于明白了。
当第30次运行后通常挂起应用程序的功能启动时,我可以看到其中一些运行(窗口的标题按预期更改)。我发现了这个功能,并在每一行之后发布:
this.Title = "1";
SomeFunction();
this.Title = "2";
AnotherFunction();
this.Title = "3";
// and so on
我本地化导致问题的原因;有一个功能可以显着改变GUI(很多foo.Visibility
和foo.Opacity
)并且在一些奇怪的循环中运行。前20次运行它很好,但是在30日之后它减慢了应用程序,并且在第40次之后导致了崩溃。
它现在只在需要时运行一次并且问题没有出现。我想它会导致某种GUI内存溢出。
无论如何,谢谢你的答案 - 我运行了内存分析,但它减慢了我的应用程序到那时无法使用它。