gpt4 book ai didi

C# WPF 应用程序随时间卡住

转载 作者:可可西里 更新时间:2023-11-01 02:34:45 26 4
gpt4 key购买 nike

我构建了一个 C# WPF 应用程序,它有几个后台线程,它们正在执行以下任务:

  1. 几个线程,每个线程都包含一个在 while 循环中运行的 TCP 服务器,每个线程都只是在等待来自特定端口的消息
  2. 一个线程持续监控 I/O 设备的 USB 端口
  3. 一个线程正在从 Microsoft Kinect 设备获取数据
  4. 一些计时器调度程序线程根据从其他线程引发的“标志”(或静态全局变量)进行一些更新。

一个例子:

    Thread thread = new Thread(new ThreadStart(Server));
private static void Server()
{
try
{
IPAddress ipAd = IPAddress.Parse("192.168.1.119");
// use local m/c IP address, and
// use the same in the client

/* Initializes the Listener */
TcpListener myList = new TcpListener(ipAd, 8003);

/* Start Listeneting at the specified port */
myList.Start();

System.Diagnostics.Debug.Write("The server is running at port 8003...");
System.Diagnostics.Debug.Write("The local End point is :" +
myList.LocalEndpoint);
System.Diagnostics.Debug.Write("Waiting for a connection.....");

Socket s = myList.AcceptSocket();
System.Diagnostics.Debug.Write("Connection accepted from " + s.RemoteEndPoint);

byte[] b = new byte[100];
k = s.Receive(b);
Console.WriteLine("Recieved...");

string temp = "";
for (int i = 0; i < k; i++)
{
System.Diagnostics.Debug.Write(Convert.ToChar(b[i]));
temp += Convert.ToChar(b[i]);
}

ASCIIEncoding asen = new ASCIIEncoding();
s.Send(asen.GetBytes("The string was recieved by the server."));
System.Diagnostics.Debug.Write("\nSent Acknowledgement");
/* clean up */
s.Close();
myList.Stop();

if (k > 0)
{
cont = true;
k = 0;
}
}
catch (Exception e)
{
Console.WriteLine("Error..... " + e.StackTrace);
}
}

所以我遇到的问题是偶尔应用程序会死机,我根本无法访问它。主 UI 线程也卡住了,我什至无法从 Windows 的任务管理器中终止程序。正常情况下应用程序运行良好,但长时间使用应用程序后(例如4~5小时)会随机出现问题

我使用的电脑不是只有2G RAM和AMD双核CPU的高端PC。

我对问题的猜测可以如下:

  1. 内存不足(或某处内存泄漏,但 Windows 运行正常,只有程序卡住)
  2. 网络堵塞(即某处出现死锁,但对于简单的发送和接收应用程序来说这似乎不太可能)
  3. 无法与 USB 设备(包括 kinect)建立连接

但是,我仍然不确定如何找出问题所在。我可能对实现还很陌生,所以我很想听听 C# WPF、网络和多线程应用程序方面的一些专家的评论,以帮助我解决这个问题。谢谢。

最佳答案

最简单的调试方法是附加调试器(Visual Studio 可以做到)。然后看看线程在做什么。要使用 VS 进行调试,请转到“调试”->“附加到进程”并选择您的进程。如果这不起作用,您可以尝试使用任务管理器转储进程(如果您有 Windows 7 或更高版本),只需右键单击该进程并选择创建转储文件。然后您可以使用 windbg 或 VS 对该文件进行离线分析。您想要查看的最有用的信息是线程在锁定时正在做什么。这些通常是解决此类问题的最佳第一步。

关于C# WPF 应用程序随时间卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15560542/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com