读书人

请问C#中tcp连接能不能去掉这个“try”

发布时间: 2013-07-16 22:38:04 作者: rapoo

请教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--)才对。

读书人网 >C#

热点推荐