在Web应用程序中,我分割字符串并分配链接名称或字符串集合.将stringbuilder用于Web应用程序是否有显着的性能优势?
编辑:2个功能:将链接分成5-10个字符串.然后重新打包成另一个字符串.每次点击链接时,我也会一次向链接添加一个字符串.
我已经创建了测试应用程序来测试,Is StringBuilder将数据复制到另一个实例并在其长度超过当前容量时增长缓冲区并在ildasm.exe中验证但它看起来完全相同.
如何验证StringBuilder会将其数据复制到新实例并按指定的限制增长缓冲区?
当使用字符串构建器时,当使用枚举作为输入时,我从append和append行函数得到预期结果,但是当枚举被加框时,append行和append函数会给出不同的结果.
谁能告诉我这背后可能是什么?
代码输出:
Append Enum: 1
Append Enum To String: One
Append Line Enum: 1
Append Line Enum To String: One
Append Object: One
Append Object To String: One
Append Line Object: 1
Append Line Object To String: One
Run Code Online (Sandbox Code Playgroud)
码:
Public Enum eTest
One = 1
Two = 2
End Enum
Sub Main()
Dim sb As New System.Text.StringBuilder()
Dim x = eTest.One
sb.Append("Append Enum: ").Append(x).AppendLine()
sb.Append("Append Enum To String: ").Append(x.ToString()).AppendLine()
sb.Append("Append Line Enum: ").AppendLine(x)
sb.Append("Append Line Enum To String: ").AppendLine(x.ToString()) …Run Code Online (Sandbox Code Playgroud) 我想要一个干净的方法来增加StringBuilder()的大小,因为本地代码需要填充,下面的回调方法看起来很干净,但不知怎的,我们得到缓冲区的副本而不是实际的缓冲区 - 我感兴趣的是解释和解决方案(最好坚持回调类型分配,因为只要它可以工作就会很好和干净).
using System;
using System.Runtime.InteropServices;
using System.Text;
namespace csharpapp
{
internal class Program
{
private static void Main(string[] args)
{
var buffer = new StringBuilder(12);
// straightforward, we can write to the buffer but unfortunately
// cannot adjust its size to whatever is required
Native.works(buffer, buffer.Capacity);
Console.WriteLine(buffer);
// try to allocate the size of the buffer in a callback - but now
// it seems only a copy of the buffer is passed to native code
Native.foo(size => …Run Code Online (Sandbox Code Playgroud) 有没有快速的方法StringBuilder在C#中多次追加?当然我可以编写自己的扩展来追加循环,但它看起来无效.
我需要在循环中提取许多巨大的StringBuilders的第一行(每个大约1mb的数据).为此,我想到了这样做:
string header;
foreach(StringBuilder strBuilder in bigArray)
header= strBuilder.ToString().SubString(blabla);
Run Code Online (Sandbox Code Playgroud)
但我担心.ToString()方法可能需要很长时间才能执行.你对我如何有效地做到这一点有任何想法吗?
如果直接完成打印StringBuilder对象的内容或者.toString()调用该方法,它会有所不同吗?
特别是
StringBuilder sb = new StringBuilder("abc");
System.out.println(sb);
System.out.println(sb.toString());
Run Code Online (Sandbox Code Playgroud)
一种风格比另一种更受欢迎吗?
任何人都可以评论为什么第一种方式有效?在Java中是否System.out.println隐式调用.toString()了对象的方法?
我有一个像下面的字符串
12SELVASOFTWAREENGINEER................323
Run Code Online (Sandbox Code Playgroud)
这个字符串长度超过 10000
此字符串的前两个字母是员工ID
所以我可以得到我的员工ID如下
String empid = str.substring(0,2);
Run Code Online (Sandbox Code Playgroud)
但是这个字符串为原始字符创建了相同的空间String,因此会发生内存泄漏.
怎么避免这个?
他们的任何替代或有效方式是他们在java中获取字符串的一部分
任何帮助将不胜感激!!!
假设我有一个ArrayList<String>500的大小,然后我想有效地连接索引(从1开始)的字符串:1-100,101-200,...,401-500字符串(所以我想得到5个字符串而不是500).我以为我可以使用StringBuilder,然后使用.toString,但.toString()方法StringBuilder创建一个新字符串,所以有效地我将创建5 * 2 = 10的字符串这是坏的(这些字符串是真正巨大的,我很短的空间).什么是最好的内存和时间有效的方法呢?
到目前为止我尝试过的:
有一个错字:我的意思是StringBuilder代替StringBuffer.我使用了StringBuilder一个简单的for循环ArrayList<String>.所以我使用了3x空间(1x - 初始ArrayList,2x - for StringBuilder,3x - 当sb.toString()有效创建返回时调用new String(value, 0, count);)
我正在学习StringBuider类。我在该站点和许多其他书籍中已经读到,当编译器遇到文字的“ +”运算符时,它将自动使用StringBuilder append的方法来将它们连接起来。
这似乎有点问题,因为将在运行时创建StringBuilder对象,但是应该在编译时获取String引用的串联String对象的地址。
String s1 = "hello";
String s2 ="bc";
int value = 22;
Run Code Online (Sandbox Code Playgroud)
当编译器“满足”此代码时:
String s = s1+s2+22;
Run Code Online (Sandbox Code Playgroud)
它将“更改”为:
String s = new StringBuilder().append("hello").append("bc").append(22).toString();
Run Code Online (Sandbox Code Playgroud)
也许我误会了什么?
stringbuilder ×10
c# ×5
java ×4
string ×2
.net ×1
append ×1
java-8 ×1
jvm ×1
memory ×1
optimization ×1
performance ×1
pinvoke ×1
regex ×1
wpf ×1