昭通高速装配式建筑公司网站,《php与mysql网站开发全接触》光盘源码.rar,百度网站建设平台,昔阳做网站公司文章目录 StringBuilder和String 对比1. **循环内字符串连接**2. **构建大型日志消息**3. **格式化长字符串**4. **SQL 查询构造**5. **从文件读取并合并行**6. **拼接数组元素**7. **格式化电子邮件模板**8. **处理用户输入流**9. **JSON 或 XML 格式的序列化与构建**10. **动… 文章目录 StringBuilder和String 对比1. **循环内字符串连接**2. **构建大型日志消息**3. **格式化长字符串**4. **SQL 查询构造**5. **从文件读取并合并行**6. **拼接数组元素**7. **格式化电子邮件模板**8. **处理用户输入流**9. **JSON 或 XML 格式的序列化与构建**10. **动态生成 HTML 页面**11. **构建长路径名**12. **处理大量字符串分割与合并**13. **格式化复杂的表格数据**14. **动态生成SQL IN子句**15. **拼接加密后的密码散列** C# 中的
string 和
StringBuilder 类主要在内存管理和字符串操作性能上存在显著区别 StringBuilder和String 对比
String 类
不可变性字符串是不可变的每次对字符串进行修改如拼接、替换等时都会创建一个新的字符串实例。内存分配由于不可变性每次字符串操作都需要在内存堆中为新字符串分配空间这会导致频繁的内存分配和垃圾回收。性能对于单个或少量的字符串操作性能影响可能不大。但在大量或频繁的字符串连接操作尤其是循环中会产生大量的中间字符串严重影响性能。
StringBuilder 类
可变性StringBuilder 是可变的可以在原对象上直接修改内容不会生成新的对象。内存效率它预先分配了一定大小的缓冲区并且可以根据需要动态扩展容量减少了内存分配次数从而提高了内存使用效率。性能适用于处理多个字符串拼接的情况尤其是在循环或其他需要多次修改字符串的场景下其性能远优于 String 类。
提升性能的使用案例
以下是十个展示 StringBuilder 在性能优化方面应用的示例
1. 循环内字符串连接
string result ;
for (int i 0; i 10000; i)
{// 错误的做法会生成很多临时字符串// result Item i;// 正确的做法使用 StringBuilderStringBuilder sb new StringBuilder();sb.Append(Item);sb.Append(i);result sb.ToString(); // 只在循环结束后生成最终字符串
}2. 构建大型日志消息
StringBuilder logBuilder new StringBuilder();
for (int i 0; i data.Length; i)
{logBuilder.Append(data[i].ToString());logBuilder.Append(,);
}
string logMessage logBuilder.ToString().TrimEnd(,);3. 格式化长字符串
StringBuilder reportBuilder new StringBuilder();
foreach (var item in reportData)
{reportBuilder.AppendFormat(ID: {0}, Name: {1}, Value: {2}\n, item.Id, item.Name, item.Value);
}
string report reportBuilder.ToString();4. SQL 查询构造
StringBuilder sqlQuery new StringBuilder(SELECT * FROM Users WHERE );
bool isFirst true;
foreach (var condition in conditions)
{if (!isFirst)sqlQuery.Append( AND );sqlQuery.Append($Column {condition});isFirst false;
}
ExecuteSql(sqlQuery.ToString());5. 从文件读取并合并行
StringBuilder fileContent new StringBuilder();
using (StreamReader reader new StreamReader(largeFile.txt))
{string line;while ((line reader.ReadLine()) ! null){fileContent.AppendLine(line);}
}
string completeFileText fileContent.ToString();6. 拼接数组元素
int[] numbers Enumerable.Range(1, 10000).ToArray();
StringBuilder numStr new StringBuilder();
foreach (int number in numbers)
{numStr.Append(number.ToString());numStr.Append(,);
}
string numList numStr.ToString().TrimEnd(,);7. 格式化电子邮件模板
StringBuilder emailBody new StringBuilder(emailTemplate);
emailBody.Replace({Name}, customer.Name);
emailBody.Replace({OrderNo}, order.OrderNumber);
SendEmail(customer.Email, emailBody.ToString());8. 处理用户输入流
StringBuilder inputBuffer new StringBuilder();
while (streamReader.Peek() 0)
{inputBuffer.Append((char)streamReader.Read());
}
ProcessInput(inputBuffer.ToString());9. JSON 或 XML 格式的序列化与构建
StringBuilder jsonBuilder new StringBuilder([);
for (int i 0; i list.Count; i)
{jsonBuilder.Append(JsonConvert.SerializeObject(list[i]));if (i list.Count - 1)jsonBuilder.Append(,);
}
jsonBuilder.Append(]);
string jsonArray jsonBuilder.ToString();10. 动态生成 HTML 页面
csharp
StringBuilder htmlPage new StringBuilder(htmlbody);
foreach (var article in articles)
{htmlPage.AppendFormat(h2{0}/h2p{1}/p, article.Title, article.Content);
}
htmlPage.Append(/body/html);
return htmlPage.ToString();11. 构建长路径名
StringBuilder pathBuilder new StringBuilder();
pathBuilder.Append(basePath);
foreach (string directory in directories)
{pathBuilder.Append(Path.DirectorySeparatorChar);pathBuilder.Append(directory);
}
string fullPath pathBuilder.ToString();12. 处理大量字符串分割与合并
csharp
string[] parts longString.Split(;);
StringBuilder rebuiltString new StringBuilder();
for (int i 0; i parts.Length; i)
{rebuiltString.Append(parts[i].Trim());if (i parts.Length - 1)rebuiltString.Append(; );
}
string processedString rebuiltString.ToString();13. 格式化复杂的表格数据
csharp
StringBuilder tableBuilder new StringBuilder();
foreach (var row in dataTable.Rows)
{for (int i 0; i dataTable.Columns.Count; i){tableBuilder.Append(row[i].ToString().PadRight(20));if (i dataTable.Columns.Count - 1)tableBuilder.Append(|);}tableBuilder.AppendLine();
}
string formattedTable tableBuilder.ToString();14. 动态生成SQL IN子句
csharp
Listint ids GetIds();
StringBuilder inClause new StringBuilder(IN ();
for (int i 0; i ids.Count; i)
{inClause.Append(ids[i]);if (i ids.Count - 1)inClause.Append(,);
}
inClause.Append());
ExecuteSql($SELECT * FROM Users WHERE Id {inClause.ToString()}); 15. 拼接加密后的密码散列
csharp
StringBuilder passwordHashBuilder new StringBuilder();
using (SHA256 sha256 SHA256.Create())
{byte[] hashBytes sha256.ComputeHash(Encoding.UTF8.GetBytes(password));foreach (byte b in hashBytes){passwordHashBuilder.Append(b.ToString(x2));}
}
string passwordHash passwordHashBuilder.ToString();以上这些例子再次强调了在需要频繁修改和拼接字符串的场景下StringBuilder相比于string能够显著提升性能。
python学习汇总连接 50个开发必备的Python经典脚本(1-10)
50个开发必备的Python经典脚本(11-20)
50个开发必备的Python经典脚本(21-30)
50个开发必备的Python经典脚本(31-40)
50个开发必备的Python经典脚本(41-50) ————————————————
最后我们放松一下眼睛