请问C#中tcp连接能不能去掉这个“try”
请教C#中tcp连接能不能去掉这个“try”以前做了一个基于udp的高频率传输数据的服务器,但最近要新增一个基于
请教C#中tcp连接能不能去掉这个“try” 以前做了一个基于udp的高频率传输数据的服务器,但最近要新增一个基于互联网的tcp服务,连接传输倒没问题,但我担心数据频率高会影响效率。我现在在服务器端的数据传输是这样的
for (int i = 0; i < TcpList.Count; i++) { try { TcpList[i].Send(Encoding.UTF8.GetBytes("data...")); } catch { TcpList.RemoveAt(i); } } 如果我不加上try的话,有的时候客户端那边退出了程序,服务器端就会报错了。所以我不得不加了一个try。但是当客户端多的时候,并且传输数据频率高的情况下,这里本身就是一个for循环,每次还得进行一次try(我在书上看到说try很影响效率),怕影响整体的传输效率。
如果tcp这里使用异步send会更好吗?
不知道怎么样处理会更好,哪位高手愿意指点一下,十分感谢!!!
[解决办法] http://msdn.microsoft.com/en-us/library/ms973839.aspx?ppud=4
按照MSDN的说法“Bear in mind that this has nothing to do with try/catch blocks: you only incur the cost when the actual exception is thrown. You can use as many try/catch blocks as you want. ”
你无需过于担心try/catch
[解决办法] 不用去掉try catch。因为在重要的地方使用它会比不使用得到的更多。
知识你的catch可以进行调整一下,表面上看不带参数的 catch 子句捕捉任何类型的异常,实际上这是掩耳盗铃。既然你使用了catch就说明你有可以预见的几种不受控制的情况发生。
为了保险,自然每种情况应对不用的处理。
[解决办法] 引用: for (int i = 0; i < TcpList.Count; i++) { try { TcpList[i].Send(Encoding.UTF8.GetBytes("data...")); } catch { TcpList.RemoveAt(i); } } TcpList.RemoveAt(i);//这句运行后。。 集合应该已经改变了。。 for (int i = 0; i < TcpList.Count; i++) 我感觉这个代码应该是有问题的。
凡调用remove方法移除集合的情况,一般都是从最后一个元素开始遍历,这样移除后不会影响下面将要遍历的项。这里改为for (int i = TcpList.Count - 1; i >=0; i--)才对。