日期:2014-05-17  浏览次数:20855 次

请教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++)