Mar*_*SFT 2 performance functional-programming immutability
我刚刚进入函数式编程并试图理解何时应该使类/属性变得可变.
使用大量字符串连接时,我们知道最好使用StringBuilder,例如:
using System;
using System.Diagnostics;
using System.Text;
namespace ConsoleApplication3
{
internal class Program
{
private static string myStr;
private static readonly StringBuilder mySb = new StringBuilder();
private static void Main(string[] args)
{
Profile("+", 100000, () => myStr = myStr + "a"); // Takes 2236 ms
Profile("SB", 100000, () => mySb.Append("a")); // Takes 1 ms
}
private static void Profile(string description, int iterations, Action func)
{
// clean up
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
// warm up
func();
Stopwatch watch = Stopwatch.StartNew();
for (int i = 0; i < iterations; i++)
{
func();
}
watch.Stop();
Console.Write(description);
Console.WriteLine(" Time Elapsed {0} ms", watch.ElapsedMilliseconds);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这就是俗称的情况下在它的显著更好的性能,通过连接字符串StringBuilder相对于+运营商.我的假设是StringBuilder通过创建更少的字符串来实现更好的性能.
性能和不变性之间是否存在平衡,或者出于某种原因这种情况是否例外?
| 归档时间: |
|
| 查看次数: |
276 次 |
| 最近记录: |