我正在寻找一种适当的抽象方法,以使用C#从系统中获取ODBC数据源列表。我已经尝试过“在注册表中查找”技巧,我发现它在英语中效果很好:RegistryKeyreg=(Registry.CurrentUser).OpenSubKey("Software");reg=reg.OpenSubKey("ODBC");reg=reg.OpenSubKey("ODBC.INI");reg=reg.OpenSubKey("ODBCDataSources");andthen,ofcourse,iteratingoverreg.GetValueNames()唯一的问题是,我发现至少在一台西类牙语机器上,
我正在使用C#和.NET3.5。我需要生成并存储一些稍后将在远程服务器上执行的T-SQL插入语句。例如,我有一个员工数组:newEmployee[]{newEmployee{ID=5,Name="FrankGrimes"},newEmployee{ID=6,Name="TimO'Reilly"}}我需要得到一个字符串数组,如下所示:"INSERTINTOEmployees(id,name)VALUES(5,'FrankGrimes')","INSERTINTOEmployees(id,name)VALUES(6,'TimO''Reilly')"我正在查看一些使用String.Forma
这是:foreach(TypeiteminmyCollection){StringBuildersb=newStringBuilder();}远低于:StringBuildersb=newStringBuilder();foreach(TypeiteminmyCollection){sb=newStringBuilder();}换句话说,我在哪里声明我的StringBuilder真的很重要吗? 最佳答案 不,在何处声明它在性能方面并不重要。对于一般的代码清洁度,您应该在使用它的最内层范围内声明它-即。你的第一个例子。
我知道在C#中使用StringBuilder有明显的性能优势,但内存差异是什么?StringBuilder是否使用更多内存?附带说明一下,stringbuilder本质上有哪些不同之处使其速度如此之快? 最佳答案 简短回答:StringBuilder适用于连接任意数量的字符串的情况,而这些字符串在编译时是未知的。如果您确实知道在编译时要组合哪些字符串,StringBuilder基本上毫无意义,因为您不需要它的动态调整大小功能。示例1:您想组合“猫”、“狗”和“老鼠”。这正好是11个字符。您可以简单地分配一个长度为11的char[]数
将某个字符出现x次的次数添加到字符串中的最佳/推荐方法是什么,例如Stringheader="HEADER";header变量需要在其末尾添加,比方说100个0。但这个数字会根据其他因素而改变。 最佳答案 怎么样:header+=newstring('0',100);当然;如果您要进行多项操作,请考虑StringBuilder:StringBuildersb=newStringBuilder("HEADER");sb.Append('0',100);//(actuallya"fluent"APIifyou/really/want..
我正在玩C#,想加快程序的速度。我进行了更改并且能够这样做。但是,我需要帮助来理解为什么更改使其更快。我试图在一个问题中将代码简化为更容易理解的内容。Score1和Report1是较慢的方式。Score2和Report2是更快的方法。第一种方法首先将一个字符串和一个整数并行存储在一个结构中。接下来,在串行循环中,它循环遍历这些结构的数组并将它们的数据写入缓冲区。第二种方法首先将数据并行写入字符串缓冲区。接下来,在串行循环中,它将字符串数据写入缓冲区。以下是一些示例运行时间:运行1总平均时间=0.492087秒运行2总平均时间=0.273619秒当我使用它的早期非并行版本时,时间几乎相同
在C#中,我正在读取中等大小的文件(100KB~1MB),修改部分内容,最后写入不同的文件。所有内容均为文字。修改是作为字符串对象和字符串操作完成的。我目前的做法是:使用StreamReader从原始文件中读取每一行。为新文件的内容打开一个StringBuilder。修改字符串对象,调用StringBuilder的AppendLine(直到文件结束)打开一个新的StreamWriter,并将StringBuilder写入写入流。但是,我发现StremWriter.Write截断了32768字节(2^16),但是StringBuilder的长度比那个大。我可以写一个简单的循环来保证整个字
检查StringBuilder是否最好(最短和最快)的方法是什么?以特定字符串结尾?如果我只想检查一个字符,那不是问题sb[sb.Length-1]=='c',但如何检查它是否以更长的字符串结尾?我可以考虑从"somestring".Length开始循环并一个一个地阅读字符,但也许存在更简单的东西?:)最后我想要这样的扩展方法:StringBuildersb=newStringBuilder("Helloworld");boolhasString=sb.EndsWith("world"); 最佳答案 为避免生成完整字符串的性能开销,
我们都知道字符串是不可变的而StringBuilder是可变的。正确的。那么为什么它的方法会返回一个StringBuilder对象。它们不应该都是void方法吗?为什么会这样publicStringBuilderAppend(boolvalue)而不是publicvoidAppend(boolvalue)任何解释这个用法的例子都会很棒。 最佳答案 它叫做"fluentinterface".它允许您通过重复的点符号将调用链接在一起。returnnewStringBuilder().Append("Hello,").Append("wo
我的三个同事刚刚告诉我,没有理由使用StringBuilder来代替使用+运算符的连接。换句话说,这可以处理一堆字符串:myString1+myString2+myString3+myString4+mySt...他们使用的基本原理是,从.NET2开始,如果您使用+运算符,C#编译器将构建相同的IL,就像您使用StringBuilder一样。这对我来说是个新闻。它们正确吗? 最佳答案 不,它们不正确。字符串连接创建一个新的string而StringBuilder使用可变大小的缓冲区来构建字符串,仅在ToString()时创建一个st