我正在将大量格式化文本的日志写入.netWindows窗体应用程序中的文本框。一旦数据超过几兆就变慢了。因为我要附加字符串,所以每次都必须重新分配,对吗?我只需要将值设置到文本框一次,但在我的代码中,我正在执行line+=data数万次。有没有更快的方法来做到这一点?也许是不同的控制?有我可以使用的链表字符串类型吗? 最佳答案 如果文本框是增量添加的,例如日志输出,StringBuilder将无济于事。但是,如果上述情况属实并且您的更新足够频繁,您可能需要缓存一定数量的更新,然后一步添加它们(而不是不断添加)。这将为您节省许多字符串
更新*非常抱歉...我的示例代码包含一个错误,导致出现了很多我不理解的答案。而不是Console.WriteLine("3.this.Equals"+(go1.Equals(go2)));我想写Console.WriteLine("3.this.Equals"+(go1.Equals(sb2)));我正在尝试弄清楚如何才能成功确定两个泛型类型值是否彼此相等。基于MarkByers在thisquestion上的回答我想我可以使用value.Equals()其中value是泛型类型。我的实际问题出在LinkedList实现中,但可以通过这个更简单的示例来说明问题。classGenericO
我想从用户那里获取网络登录凭据。我正在使用.NET3.5和C#。到目前为止,我使用的是CredUIPromptForCredentials调用(可以找到关于如何使用它的非常有用的链接here)我的问题是CredUIPromptForCredentialsAPI调用显示旧的windows2000/XP凭据对话框而不是新的Vista/7。我在msdn上读到我应该使用CredUIPromptForWindowsCredentials功能。有人可以发布一个如何在C#中使用它的示例吗?我还需要能够获取输入的凭据。 最佳答案 我设法实现了一个适
我需要使用C#代码执行此操作:在后台打开putty.exe(这就像一个cmd窗口)使用IP地址登录远程主机输入用户名和密码一个接一个地执行几个命令。运行另一个命令得到响应,告诉我之前运行的命令已成功执行所以我试着这样做:ProcessStartInfoproc=newProcessStartInfo(){FileName=@"C:\putty.exe",UseShellExecute=true,//IthinkIneedtouseshellexecute?RedirectStandardInput=false,RedirectStandardOutput=false,Arguments
我在C#中连接大量byte[]数组。如果我对字符串执行此操作,我会使用StringBuilder——是否有适用于byte[]数组中的二进制数据的等效类? 最佳答案 我不认为有一个完全等价的东西,但你可以用BinaryWriter来完成它:http://msdn2.microsoft.com/en-us/library/system.io.binarywriter.aspxMemoryStreamm=newMemoryStream();BinaryWriterwriter=newBinaryWriter(m);writer.Write
我想将一个字符串分成指定最大长度的行,如果可能的话,不拆分任何单词(如果有一个单词超过了最大行长度,那么它就必须被拆分)。一如既往,我敏锐地意识到字符串是不可变的,最好使用StringBuilder类。我见过将字符串拆分为单词然后使用StringBuilder类构建行的示例,但下面的代码对我来说似乎“更简洁”。我在描述中提到“最好”而不是“最有效”,因为我也对代码的“Eloquent”感兴趣。字符串永远不会很大,一般分成两三行,也不会出现几千行的情况。下面的代码真的很糟糕吗?privatestaticIEnumerableSplitToLines(stringstringToSplit
我在StringBuilder对象中存储了一个密码。我正在寻找一种方法来删除内存中的密码。以下任何一种方法都可以实现这一点:遍历StringBuilder字符并分配'\0'。是如果我已经分配,这保证使用相同的内存最初有足够的内存吗?我可以使用任何非托管API,例如ZeroMemory()或SecureZeroMemory()使用StringBuilder?有代码示例吗?编辑:使用SecureString不是我的选择,因为我正在调用CredUIPromptForCredentials()来获取凭据。 最佳答案 简单的答案是,您提出
为什么StringBuilder比+连接更慢?StringBuilder旨在避免创建额外的对象,但为什么会降低性能?staticvoidMain(string[]args){intmax=1000000;for(inttimes=0;times编辑:按照建议移出范围变量: 最佳答案 更改以便StringBuilder不会一直实例化,而是.Clear()它:time:1String+:3348msStringBuilder:3151mstime:2String+:3346msStringBuilder:3050ms等请注意,这仍然会测
我创建了一个长度为“132370292”的StringBuilder,当我尝试使用ToString()方法获取字符串时,它抛出OutOfMemoryException.StringBuilderSB=newStringBuilder();for(inti=0;i创建新字符串时OOM的原因是什么?为什么在写入文件时不会抛出OOM?机器详细信息:64位、Windows-7、2GBRAM、.NET2.0版 最佳答案 WhatisthereasonfortheOOMwhilecreatinganewstring因为内存不足-或者至少,CLR
我需要一种方法来读取StringBuilder变量中ini文件的所有部分/键:[DllImport("kernel32.dll")]privatestaticexternintGetPrivateProfileString(stringlpAppName,stringlpKeyName,stringlpDefault,StringBuilderlpReturnedString,intnSize,stringlpFileName);...privateListGetKeys(stringiniFile,stringcategory){StringBuilderreturnString=n