Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 增加Monotouch中的线程池线程数?_C#_Ios_Sockets_Xamarin.ios_Asyncsocket - Fatal编程技术网

C# 增加Monotouch中的线程池线程数?

C# 增加Monotouch中的线程池线程数?,c#,ios,sockets,xamarin.ios,asyncsocket,C#,Ios,Sockets,Xamarin.ios,Asyncsocket,我已经使用套接字为我的应用程序编写了网络代码。我在windows PC上测试了该库,速度非常快。无论是少量时间内的许多小“数据包”(我所说的数据包是指发送操作,我使用的是流式传输的TCP),还是几个大的数据包,它都能完美地工作 我将代码移动到iPhone的测试应用程序中。进行了测试,速度又快了。大约3秒钟内,两部手机之间通过wifi发送5 MB的数据 Im在线程池线程中使用同步套接字.Send()操作,并使用ReceiveAsync()进行接收。(我也尝试过BeginReceive()样式,但其

我已经使用套接字为我的应用程序编写了网络代码。我在windows PC上测试了该库,速度非常快。无论是少量时间内的许多小“数据包”(我所说的数据包是指发送操作,我使用的是流式传输的TCP),还是几个大的数据包,它都能完美地工作

我将代码移动到iPhone的测试应用程序中。进行了测试,速度又快了。大约3秒钟内,两部手机之间通过wifi发送5 MB的数据

Im在线程池线程中使用同步套接字.Send()操作,并使用ReceiveAsync()进行接收。(我也尝试过BeginReceive()样式,但其行为相同

然而,一旦我将代码移动到我的应用程序中,我就开始遇到问题。一般的问题是接收应用程序似乎接收不一致。我可以发送几个“数据包”来自主机手机的数据,可以是任何地方,从瞬间到出现在接收端之前的几秒钟到10分钟。我已经解决这个问题两周了(晚上/周末),我花了几天时间测试它,试图准确地理解我可以做些什么来复制它,但两次都不一样

目前,我把它归结为线程池线程正在耗尽

ThreadPool.SetMaxThreads()
大幅增加线程数,但这没有任何区别。这就像SocketAsyncEventArgs中完成的回调无法获得一个线程来操作一样,所以它就放在那里。我浏览了我的代码,重构了任何不一定使用线程的东西,循环执行周期性任务,并将它们更改为tim呃,但问题仍然存在

我真的不知道该如何处理这个问题。我希望这可能是Monotouch中的一个bug(不是我想责怪那些家伙!)

我不知道该发布什么代码,因为网络代码已经过独立测试并且运行良好。我已经用1000000个发送/接收测试了它,以检查是否存在某种泄漏,但没有发现任何问题

数据似乎正在到达接收者,但回调在被调用过程中受到严重延迟,有时会延迟几分钟

有人能告诉我为什么会发生这种情况吗


谢谢。

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

增加池线程的数量不是正确的选择;实际上,这可能会导致错误事情会变得更糟,或者干脆完全杀死您的系统(堆栈使用了太多内存)。首先想到的是:
sendaync
。第二个想到的是拥有一个传出消息队列,如果需要,可以由少量编写器线程提供服务。您在这里支持多少个客户端?(另外,如果它是一个bug,那么它是Mono中的bug,而不是MonoTouch)是的,我感觉增加线程是个坏主意。我明天将尝试使用SendAsync,看看是否有帮助。我认为问题实际上是在接收端,而不是发送端。发送成功完成,但接收可能需要几分钟(或几秒钟)对于客户端,我可能会将其限制为10-12个最大客户端启用naggle(
Socket.NoDelay
)?尝试关闭该选项(当然,您需要确保不会编写太小的数据包)我刚刚明白了!这是我代码之外的某种错误。我初始化了GKSession和套接字。两者都会导致套接字的行为非常奇怪。不确定这是mono/monotouch还是Apple的问题,一旦我禁用GKSession,套接字代码就可以完美工作。我将创建一个示例应用程序,并将其发送给Xama的人员rin.你的分析已经被证明遵循了一个非常好的方法。+1你是否在bugzilla.xamarin.com上打开了一个关于这个的bug?如果没有,请这样做如果它是bug,它可以被修复