首页 > 编程语言 >C# 中的字符串内插 $对比string.Format

C# 中的字符串内插 $对比string.Format

时间:2023-10-19 11:34:12浏览次数:37  
标签:Console string Format C# list DateTime WriteLine dt2

原文:https://blog.csdn.net/HeBizhi1997/article/details/123544524

  C# 10.0 对字符串插值做了点提升,支持开发人员对字符串进行花式内插。

  附官方教程:

  https://docs.microsoft.com/zh-cn/dotnet/csharp/tutorials/string-interpolation#code-try-0icon-default.png?t=M276https://docs.microsoft.com/zh-cn/dotnet/csharp/tutorials/string-interpolation#code-try-0

  对比一下string.Format的方式,我想看下层层包装之后,性能上的差别。

  先说下我机器的配置:
  

 

#region 测试代码
var a = 3;
var b = 2;
var list = new List<int>();
Console.WriteLine("strat method one");
for (int j = 0; j < 10; j++)
{
    var dt1 = DateTime.Now;
    //Console.WriteLine(dt1.ToString("HH:mm ffff"));
    for (int i = 0; i < 1_0000_0000; i++)
    {
        var c = $"{a} + {b} = {a + b}";
    }
    var dt2 = DateTime.Now;
    //Console.WriteLine(dt2.ToString("HH:mm ffff"));
    Console.WriteLine("times " + j + " : " + (dt2 - dt1).Milliseconds);
    list.Add((dt2 - dt1).Milliseconds);
}
list.Remove(list.Max());
list.Remove(list.Min());
Console.WriteLine(list.Average());
 
list.Clear();
Console.WriteLine("strat method two");
for (int j = 0; j < 10; j++)
{
    var dt1 = DateTime.Now;
    //Console.WriteLine(dt1.ToString("HH:mm ffff"));
    for (int i = 0; i < 1_0000_0000; i++)
    {
        var c = string.Format("{0} + {1} = {2}", a, b, a + b);
    }
    var dt2 = DateTime.Now;
    //Console.WriteLine(dt2.ToString("HH:mm ffff"));
    Console.WriteLine("times " + j + " : " + (dt2 - dt1).Milliseconds);
    list.Add((dt2 - dt1).Milliseconds);
}
list.Remove(list.Max());
list.Remove(list.Min());
Console.WriteLine(list.Average()); 
#endregion

  输出结果:

  

   结论:从测试结果来说,string.Format占用的cpu资源更稳定,$语法糖就有些飘忽不定。

  但是无论是从功能扩展还是长期性能考虑来看的话,只能说微软牛逼,语法糖真香。

 

  附录:之前的测试代码反编译一下的结果

  

int a = 3;
int b = 2;
List<int> list = new List<int>();
Console.WriteLine("strat method one");
for (int i = 0; i < 10; i++)
{
    DateTime dt = DateTime.Now;
    for (int j = 0; j < 100000000; j++)
    {
        DefaultInterpolatedStringHandler defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(6, 3);
        defaultInterpolatedStringHandler.AppendFormatted<int>(a);
        defaultInterpolatedStringHandler.AppendLiteral(" + ");
        defaultInterpolatedStringHandler.AppendFormatted<int>(b);
        defaultInterpolatedStringHandler.AppendLiteral(" = ");
        defaultInterpolatedStringHandler.AppendFormatted<int>(a + b);
        string c = defaultInterpolatedStringHandler.ToStringAndClear();
    }
    DateTime dt2 = DateTime.Now;
    Console.WriteLine("times " + i.ToString() + " : " + (dt2 - dt).Milliseconds.ToString());
    list.Add((dt2 - dt).Milliseconds);
}
list.Remove(list.Max());
list.Remove(list.Min());
Console.WriteLine(list.Average());
list.Clear();
Console.WriteLine("strat method two");
for (int k = 0; k < 10; k++)
{
    DateTime dt3 = DateTime.Now;
    for (int l = 0; l < 100000000; l++)
    {
        string c2 = string.Format("{0} + {1} = {2}", a, b, a + b);
    }
    DateTime dt4 = DateTime.Now;
    Console.WriteLine("times " + k.ToString() + " : " + (dt4 - dt3).Milliseconds.ToString());
    list.Add((dt4 - dt3).Milliseconds);
}
list.Remove(list.Max());
list.Remove(list.Min());
Console.WriteLine(list.Average());

 

标签:Console,string,Format,C#,list,DateTime,WriteLine,dt2
From: https://www.cnblogs.com/alannxu/p/17774345.html

相关文章

  • react项目中预览pdf文件
    最近需求,要在b端展示上传的pdf文件。实现方式有很多,记录一下我们最常用的pdf.js//安装"pdfjs-dist":"2.0.402"//引入import*aspdfjsfrom'pdfjs-dist'import*aspdfjsWorkerfrom'pdfjs-dist/build/pdf.worker.entry'//定义初始值letpdfDoc=null;......
  • NeuVector 基于 Docker 部署
    1、Docker、Docker-Compose安装https://www.cnblogs.com/a120608yby/p/9883175.htmlhttps://www.cnblogs.com/a120608yby/p/14582853.html2、基于Docker-Compose部署NeuVector#vimdocker-compose.ymlversion:"3.8"services:allinone:pid:hostima......
  • Centos7 配置备忘
    一、静态IP配置vi/etc/sysconfig/network-scripts/ifcfg-enp0s8#更改为BOOTPROTO=staticONBOOT=yesIPADDR=192.168.56.101NETMASK=255.255.255.0GATEWAY=192.168.56.1#重启服务systemctlrestartnetwork二、SELINUX禁用#编辑配置文件vi/etc/selinux/configSELINU......
  • Navicat常见问题
    查询假死Navicat空闲一段时间之后查询会异常缓慢,产生假死的现象,可以尝试修改保持连接属性来处理。......
  • 想让你的代码简洁,试试这个SimpleDateFormat类高深用法
    本文分享自华为云社区《从入门到精通:SimpleDateFormat类高深用法,让你的代码更简洁!》,作者:bug菌。环境说明:Windows10+IntelliJIDEA2021.3.2+Jdk1.8@[toc]前言日期时间在开发中是非常常见的需求,尤其是在处理与时间相关的业务逻辑时,我们需要对日期时间进行格式化、比较......
  • 使用SyncFavor进行文件同步
    SyncFavor是基于C#开发的免费文件同步工具,运行在windows上,下载链接:https://github.com/bsmith-zhao/sync同步管理界面:批量运行界面: 主从同步示例 下载压缩包解压,双击sync.exe启动同步管理器,可以看到空白的管理界面:点击工具栏的[添加工作区]创建工作区,工作区是一系列......
  • 【LCT、树状数组】CF1137F Matches Are Not a Child's Play
    哈人*3400,是不是贺过了个1F(?单点编号\(\tomax+1\),动态维护prufer序列删除了哪些点。看似不可做,但是不难发现我们一个点被更改其他点的相对次序不会改变,反而\(x\tomax\)这条链的删除次序到了最后面。然后我们以权值最大点为根,不难发现每次只是对根到该点的链更改了......
  • Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:res
    Failedtoexecutegoalorg.apache.maven.plugins:maven-resources-plugin:3.2.0:resources 一、问题背景在SpringBoot工程编译过程中,出现报错信息:“Failedtoexecutegoalorg.apache.maven.plugins:maven-resources-plugin:3.2.0:resources”。 效果如下: 二、解......
  • LLM探索:为ChatGLM2的gRPC后端增加连续对话功能
    前言之前我做AIHub的时候通过gRPC的方式接入了ChatGLM等开源大模型,对于大模型这块我搞了个StarAI框架,相当于简化版的langchain,可以比较方便的把各种大模型和相关配套组合在一起使用。主要思路还是用的OpenAI接口的那套,降低学习成本,但之前为了快速开发,就只搞了个简单......
  • html+css3+anime.js实现线条来回滑动且渐隐动画
    效果: 代码:<!DOCTYPEhtml><html><head><metahttp-equiv="Content-Type"content="text/html;charset=UTF-8"/><metaname="viewport"content="width=device-width,initial-sc......