阅读背景:

string字符串太长怎么办?

来源:互联网 
顺便说一下(我做的是FTP的一个客户端,我要获取文件列表,而这个文件夹文件很多),我是用套接字接收整个字符串。所以m_Message(string类型)很大,如为"e:
顺便说一下(我做的是FTP的一个客户端,我要获取文件列表,而这个文件夹文件很多),我是用套接字接收整个字符串。所以m_Message(string类型)很大,如为"e:\1.jpg\r\ne:\2.jpg\r\n.......e:\4999.jpg",所以可能会越界。那我用 stringbuilder存可以吗?还是要用到流会比较好。还是怎么做?
部分代码如下:
while(timeout > DateTime.Now)//判断超时
{
int iBytes = dataSocket.Receive(m_Buffer, m_Buffer.Length, 0);
this.m_Message += Encoding.ASCII.GetString(m_Buffer, 0, iBytes);
if(iBytes < m_Buffer.Length)
break;
}

5 个解决方案

#1


反正有上万个文件。这个路径字符串很大。"e:\1.jpg\r\ne:\2.jpg\r\n.......e:\4999.jpg。。。"

#2


你很多this.m_Message +=操作,肯定要用stringbuilder,长度不知道,应该放得下吧。但性能会强很多
或者每个路径存arraylist或hashtable,

#3


分着接不好么?不然用stringbuilder,这个快点...

#4


放在数组里吧~~先将\r\n换成“|”然后用Split分割,

#5


这种情况当然要用 StringBuilder...

StringBuilder 对象维护一个缓冲区,以便容纳新数据的串联。如果有足够的空间,新数据将被追加到缓冲区的末尾;否则,将分配一个新的、更大的缓冲区,原始缓冲区中的数据被复制到新的缓冲区,然后将新数据追加到新的缓冲区。
String 或 StringBuilder 对象的串联操作的性能取决于内存分配的发生频率。String 串联操作每次都分配内存,而 StringBuilder 串联操作仅当 StringBuilder 对象缓冲区太小而无法容纳新数据时才分配内存。因此,如果串联固定数量的 String 对象,则 String 类更适合串联操作。这种情况下,编译器甚至会将各个串联操作组合到一个操作中。如果串联任意数量的字符串,则 StringBuilder 对象更适合串联操作;例如,某个循环对用户输入的任意数量的字符串进行串联。
给实现者的说明 此实现的默认容量是 16,默认的最大容量是 Int32.MaxValue。 当实例值增大时,StringBuilder 可按存储字符的需要分配更多的内存,同时对容量进行相应的调整。分配的内存量是特定于实现的,而且如果所需内存量大于最大容量,会引发ArgumentOutOfRangeException。 

.jpg\r\ne:.jpg\r\n.......e:99.jpg",所以可能会越界。那我用 stringbuilder存可以吗?还是要用到流会比较好。还是怎么做? 顺便说一下(我做的是FTP的一个客户端,我要获取文件列表,而这个文件夹文件很多),我是用套接字



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: