List<T>如果合理地知道它的初始化是否值得?
编辑:进一步提出这个问题,在阅读完第一个答案之后,这个问题实际上归结为什么是默认容量以及如何进行增长操作,是否将容量增加一倍等?
我知道当sb已经处于容量状态时,当你使用sb.Append(..)时,StringBuilder对象会分配更多的内存.但是这个容量增加了多少?
StringBuilder sb = new StringBuilder(5);
sb.Append("0123456789");
Run Code Online (Sandbox Code Playgroud)
现在,某人的能力是什么?为什么?乘数是多少?
为了清楚起见.我问的是容量而不是长度.
谢谢!
我已经创建了测试应用程序来测试,Is StringBuilder将数据复制到另一个实例并在其长度超过当前容量时增长缓冲区并在ildasm.exe中验证但它看起来完全相同.
如何验证StringBuilder会将其数据复制到新实例并按指定的限制增长缓冲区?
可能重复:
StringBuilder的容量如何变化?
假设分配了一个StringBuilder,然后它增长到超过85k,它会被移到大对象堆上吗?
我需要在循环中附加大量字符串,这将创建一个非常长的字符串.
1GB应该足够长以存储字符串,因此我这样做:
var sb = new StringBuilder(1024 * 1024 * 1024);
Run Code Online (Sandbox Code Playgroud)
但收到此错误
'System.OutOfMemoryException' was thrown
Run Code Online (Sandbox Code Playgroud)
任何追加长串的建议?
我正在为MySQL数据库编写备份工具.这些工具将从数据库导出数据并写入文本文件.数据包含BLOB和TEXT数据类型.所以,期待很长的字符串.
这是代码:代码更新1
var conn = new MySqlConnection(Program.ConnectionString);
var cmd = new MySqlCommand();
cmd.Connection = conn;
conn.Open();
cmd.CommandText = selectSQL;
MySqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
var sb = new StringBuilder(1024 * 1024 * 1024);
for (int i = 0; i < rdr.FieldCount; i++)
{
if (sb.Length > 0)
sb.AppendFormat(separator);
if (rdr[i].GetType() == typeof(byte[]))
{
sb.AppendFormat(ConvertByteArrayToHexString((byte[])rdr[i]));
}
else
sb.AppendFormat(rdr[i] + "");
}
WriteToFile(sb.ToString()); …Run Code Online (Sandbox Code Playgroud)