1

我对 Windows Phone 7.1 API 有一个奇怪的问题。我正在尝试编写一个应用程序来从触摸屏发送 touch-delta 以在桌面 PC 上移动鼠标指针。我正在使用 UDP 套接字,但我有一些性能问题。

udp 消息的发送似乎每 0.5 秒左右冻结 0.5-1.0 秒。我没有发送大量数据,我也在限制它。我最近尝试找出导致它的原因有点出乎意料。

当有一个带有持续发送随机数据的while循环的单独线程时,一切工作顺利且正常。但是当我开始触摸 WP7-mobile 的屏幕时,我开始出现这些奇怪的问题。出于调试目的,我已经删除了触摸事件的所有侦听器,并且我在我的应用程序中没有做任何其他事情,然后在 UDP 套接字上发送这些数据。但是为什么当我在屏幕上移动手指时它会像这样冻结?这使得编写这样的应用程序变得不可能。

我听说触控操作应该移到一个专门的线程,那是包含在WP7.1的Beta2更新中的吗?

代码有点像这样:

    new Thread(() =>
    {
        while (true)
        {
            _event.Reset();
            _socket.SendToAsync(_args);
            _event.WaitOne();
            Thread.Sleep(5);
        }
    }).Start();

事件句柄在 SendToAsync 完成时设置。所以它大约每 5 毫秒发送一次 udp 数据。只要我不在手机屏幕上触摸和拖动手指,它就可以正常工作(我可以稳定快速地接收)。然后我开始定期冻结 1 秒。很奇怪,因为我在单独的线程上运行 udp 触发。手机的 CPU 在处理操作时是否以某种方式过载?这会导致打嗝吗?


更新

我已经在另一个线程中重新讨论并更新了这个问题,以使其更加清晰:

Windows Phone 7.1 (Mango) 的 UDP 性能不佳

4

1 回答 1

1

一切都在 UI 线程上运行,直到您将其推送到另一个线程。我的大多数事件处理程序看起来像这样

ThreadPool.QueueUserWorkItem(state => /* do stuff */);

我有 Mango b2,确实有些东西已从 UI 线程中移出,但这很不稳定,而且很容易自己完成。

于 2011-08-02T21:01:03.373 回答