4:导入Microsoft Visual Basic RunTime (Microsoft.VisualBasic.DLL) 使用Strings.Replace速度很快。
private static string ReplaceEx(string original, 
 string pattern, string replacement)
{
 int count, position0, position1;
 count = position0 = position1 = 0;
 string upperString = original.ToUpper();
 string upperPattern = pattern.ToUpper();
 int inc = (original.Length/pattern.Length) * 
 (replacement.Length-pattern.Length);
 char [] chars = new char[original.Length + Math.Max(0, inc)];
 while( (position1 = upperString.IndexOf(upperPattern, 
 position0)) != -1 )
 {
 for ( int i=position0 ; i < position1 ; ++i )
 chars[count++] = original[i];
 for ( int i=0 ; i < replacement.Length ; ++i )
 chars[count++] = replacement[i];
 position0 = position1+pattern.Length;
 }
 if ( position0 == 0 ) return original;
 for ( int i=position0 ; i < original.Length ; ++i )
 chars[count++] = original[i];
 return new string(chars, 0, count);
}
测试
static void Main(string[] args)
{
 string segment = "AaBbCc";
 string source;
 string pattern = "AbC";
 string destination = "Some";
 string result = ""; 
 const long count = 1000;
 StringBuilder pressure = new StringBuilder();
 HiPerfTimer time;
 for (int i = 0; i < count; i++)
 {
 pressure.Append(segment);
 }
 source = pressure.ToString();
 GC.Collect();
 //regexp
 time = new HiPerfTimer();
 time.Start();
 for (int i = 0; i < count; i++)
 {
 result = Regex.Replace(source, pattern, 
 destination, RegexOptions.IgnoreCase);
 }
 time.Stop();
 Console.WriteLine("regexp = " + time.Duration + "s");
 GC.Collect();
 //vb
 time = new HiPerfTimer();
 time.Start();
 for (int i = 0; i < count; i++)
 {
 result = Strings.Replace(source, pattern, 
 destination, 1, -1, CompareMethod.Text);
 }
 time.Stop();
 Console.WriteLine("vb = " + time.Duration + "s");
 GC.Collect();
 //vbReplace
 time = new HiPerfTimer();
 time.Start();
 for (int i = 0; i < count; i++)
 {
 result = VBString.Replace(source, pattern, 
 destination, 1, -1, StringCompareMethod.Text);
 }
 time.Stop();
 Console.WriteLine("vbReplace = " + time.Duration + "s");// + result);
 GC.Collect();
 // ReplaceEx
 time = new HiPerfTimer();
 time.Start();
 for (int i = 0; i < count; i++)
 {
 result = Test.ReplaceEx(source, pattern, destination);
 }
 time.Stop();
 Console.WriteLine("ReplaceEx = " + time.Duration + "s");
 GC.Collect();
 // Replace
 time = new HiPerfTimer();
 time.Start();
 for (int i = 0; i < count; i++)
 {
 result = source.Replace(pattern.ToLower(), destination);
 }
 time.Stop();
 Console.WriteLine("Replace = " + time.Duration + "s");
 GC.Collect();
 //sorry, two slow :(
 /*//substring
 time = new HiPerfTimer();
 time.Start();
 for (int i = 0; i < count; i++)
 {
 result = StringHelper.ReplaceText(source, pattern, 
 destination, StringHelper.CompareMethods.Text);
 }
 time.Stop();
 Console.WriteLine("substring =" + time.Duration + ":");
 GC.Collect();
 //substring with stringbuilder
 time = new HiPerfTimer();
 time.Start();
 for (int i = 0; i < count; i++)
 {
 result = StringHelper.ReplaceTextB(source, pattern, 
 destination, StringHelper.CompareMethods.Text);
 }
 time.Stop();
 Console.WriteLine("substringB=" + time.Duration + ":");
 GC.Collect();
 */
 Console.ReadLine();
}
1¡¢string segment = "abcaBc";
regexp = 3.75481827997692s
vb = 1.52745502570857s
vbReplace = 1.46234256029747s
ReplaceEx = 0.797071415501132s !!!
Replace = 0.178327413120941s // ReplaceEx > vbReplace > vb > regexp
2¡¢string segment = "abcaBcabC";
regexp = 5.30117431126023s
vb = 2.46258449048692s
vbReplace = 2.5018721653171s
ReplaceEx = 1.00662179131705s !!!
Replace = 0.233760994763301s // ReplaceEx > vb > vbReplace > regexp
3¡¢string segment = "abcaBcabCAbc";
regexp = 7.00987862982586s
vb = 3.61050301085753s
vbReplace = 3.42324876485699s
ReplaceEx = 1.14969947297771s !!!
Replace = 0.277254511397398s // ReplaceEx > vbReplace > vb > regexp
4¡¢string segment = "ABCabcAbCaBcAbcabCABCAbcaBC";
regexp = 13.5940090151123s
vb = 11.6806222578568s
vbReplace = 11.1757614445411s
ReplaceEx = 1.70264153684337s !!!(my god!)
Replace = 0.42236820601501s// ReplaceEx > vbReplace > vb > regexp
查看程序的Block在:
赞
If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
 
 
QQ:154298438
QQ:417480759