赛马!
这是一个使用 fixed 和 unsafe 的指针版本,并带有预分配的结果
unsafe string Mine()
{
var temp = string.Copy(Input);
var i = 0;
fixed (char* pInput = Input, pTemp = temp)
{
var plen = pInput + Input.Length;
for (var pI = pInput + 1; pI < plen; pI++)
if (*pI != *(pTemp+i))
*(pTemp + ++i) = *pI;
}
return temp.Substring(0,i+1);
}
结果
Mode : Release
Test Framework : .NET Framework 4.7.1
Benchmarks runs : 100 times (averaged)
长度:100
Name | Average | Fastest | StDv | Cycles | Pass
---------------------------------------------------------
Mine | 0.003 ms | 0.002 ms | 0.00 | 3,935 | Yes
Dmitry | 0.003 ms | 0.002 ms | 0.00 | 5,455 | Yes
Billy | 0.003 ms | 0.002 ms | 0.00 | 5,706 | Yes
SAkbari3 | 0.007 ms | 0.006 ms | 0.00 | 19,730 | Yes
SAkbari1 | 0.009 ms | 0.008 ms | 0.00 | 25,029 | Yes
Original | 0.009 ms | 0.003 ms | 0.05 | 7,349 | Base
SAkbari2 | 0.014 ms | 0.011 ms | 0.00 | 41,027 | Yes
Heinz | 0.040 ms | 0.037 ms | 0.00 | 131,196 | Yes
长度:1,000
Name | Average | Fastest | StDv | Cycles | Pass
-----------------------------------------------------------
Mine | 0.005 ms | 0.004 ms | 0.00 | 11,126 | Yes
Billy | 0.008 ms | 0.007 ms | 0.00 | 22,402 | Yes
Dmitry | 0.009 ms | 0.006 ms | 0.00 | 24,487 | Yes
Original | 0.010 ms | 0.008 ms | 0.00 | 27,334 | Base
SAkbari3 | 0.041 ms | 0.040 ms | 0.00 | 136,272 | Yes
SAkbari1 | 0.075 ms | 0.049 ms | 0.05 | 231,981 | Yes
SAkbari2 | 0.101 ms | 0.076 ms | 0.03 | 334,375 | Yes
Heinz | 0.344 ms | 0.267 ms | 0.07 | 1,154,860 | Yes
长度:10,000
Name | Average | Fastest | StDv | Cycles | Pass
------------------------------------------------------------
Mine | 0.020 ms | 0.017 ms | 0.00 | 62,571 | Yes
Dmitry | 0.056 ms | 0.046 ms | 0.01 | 185,538 | Yes
Billy | 0.061 ms | 0.058 ms | 0.00 | 202,931 | Yes
Original | 0.069 ms | 0.058 ms | 0.01 | 230,297 | Base
SAkbari3 | 0.419 ms | 0.372 ms | 0.09 | 1,418,448 | Yes
SAkbari1 | 0.535 ms | 0.452 ms | 0.09 | 1,813,644 | Yes
SAkbari2 | 0.957 ms | 0.726 ms | 0.19 | 3,226,844 | Yes
Heinz | 2.951 ms | 2.574 ms | 0.47 | 10,027,205 | Yes
长度:100,000
Name | Average | Fastest | StDv | Cycles | Pass
--------------------------------------------------------------
Mine | 0.164 ms | 0.158 ms | 0.01 | 552,166 | Yes
Dmitry | 0.498 ms | 0.467 ms | 0.02 | 1,690,471 | Yes
Original | 0.561 ms | 0.523 ms | 0.06 | 1,894,019 | Base
Billy | 0.576 ms | 0.536 ms | 0.04 | 1,955,072 | Yes
SAkbari3 | 3.684 ms | 3.429 ms | 0.15 | 12,534,942 | Yes
SAkbari1 | 4.547 ms | 4.084 ms | 0.47 | 15,468,091 | Yes
SAkbari2 | 7.315 ms | 6.848 ms | 0.30 | 24,888,849 | Yes
Heinz | 26.091 ms | 24.898 ms | 1.17 | 88,905,648 | Yes
长度:1,000,000
Name | Average | Fastest | StDv | Cycles | Pass
-----------------------------------------------------------------
Mine | 1.841 ms | 1.549 ms | 0.20 | 6,256,290 | Yes
Dmitry | 5.237 ms | 4.740 ms | 0.27 | 17,808,335 | Yes
Original | 5.705 ms | 5.178 ms | 0.31 | 19,411,876 | Base
Billy | 6.027 ms | 5.374 ms | 0.31 | 20,477,533 | Yes
SAkbari3 | 39.369 ms | 36.608 ms | 2.27 | 134,030,971 | Yes
SAkbari1 | 46.502 ms | 44.410 ms | 1.67 | 158,181,468 | Yes
SAkbari2 | 74.398 ms | 72.187 ms | 1.41 | 253,311,101 | Yes
Heinz | 259.090 ms | 254.766 ms | 2.62 | 881,738,225 | Yes
总结
正则表达式很烂!