增加 Monotouch 中的 ThreadPool 线程数

本文关键字:线程 ThreadPool 中的 Monotouch 增加 | 更新日期: 2023-09-27 18:33:14

我已经使用套接字为我的应用程序编写了网络代码。我已经在Windows PC上测试了该库,它非常快。无论是在短时间内的许多小"数据包"(数据包我的意思是发送操作,我正在使用正在流式传输的TCP(,还是一些大数据包,它都可以完美地工作。

我将代码移动到iPhone的测试应用程序中。运行测试,再次以极快的速度运行。大约 5 MB 在两部手机之间通过 wifi 发送大约 3 MB。

Im在线程

池线程中使用同步Socket.Send((操作,并使用ReceiveAsync((进行接收。(我也尝试过 BeginReceive(( 样式,但它的行为是一样的。

但是,一旦我将代码移动到我的应用程序中,我就开始遇到问题。一般的问题是接收应用程序似乎没有一致地接收。我可以从主机手机发送几个"数据包"数据,它可以在它们出现在接收端之前立即发送到几秒钟到 10 分钟。我已经在这个问题上呆了 2 周(晚上/周末(,我花了几天时间测试它,试图确切地了解我可以做些什么来重现它,但它永远不会两次相同。

目前,我将其归结为线程池线程已耗尽。我用过

ThreadPool.SetMaxThreads()

大幅增加线程数,但这没有任何区别。这就像 SocketAsyncEventArgs 中完成的回调无法让线程进行操作,所以它只是坐在那里。我已经浏览了我的代码并重构了任何不必要的使用线程和循环执行定期任务的内容,并将它们更改为计时器,但问题仍然存在。

我真的不知道该去哪里找这个。我希望这可能是 Monotouch 中的一个错误(不是我试图责怪那些家伙!

我不确定要发布什么代码,因为网络代码已经过自行测试并且运行良好。我已经用 1,000,000 次发送/接收对其进行了测试,以检查是否存在某种泄漏,但没有发现任何问题。

似乎数据正在到达接收者,但回调不知何故在被调用时会严重延迟,有时延迟几分钟。

谁能指出我为什么会发生这种情况的方向?

谢谢。

增加 Monotouch 中的 ThreadPool 线程数

我的问题是由初始化 GKSession 引起的。我希望这是 Monotouch/Mono 中的一个可以修复的错误,因为我确实需要启用这两个网络功能。一旦我禁用了 GKSession,套接字代码就会自由流动。