01、LinqPad是干嘛的?

LinqPad 是一个可编写、运行C#(VB/F#/SQL)代码的轻量工具,C#开发者强烈推荐必备的工具,一个一旦用了就再也不想丢弃的工具。工具出自《C# 核心技术指南》的作者Joseph Albahari,一位.Net资深技术专家。

主要应用场景

  • 快速代码功能测试(功能测试、性能测试),这可能是最常用的场景了。
  • 把C#当成脚本语言,写一些小工具(含GUI),如爬虫工具、正则测试、API测试等。
  • 连接数据库,查询、调试数据,用Linq、SQL查询数据。

LINQPad是一个.Net的终极试验场,被广泛用于.Net学习、测试,主要特点:

  • 简单、轻量,工具只有20M+,界面简洁。
  • 快速运行任何C#、F#、VB的代码片段或程序。这一点非常方便,可以快速测试一些代码,一行代码、多行代码片段、一个方法都可以快速执行,不用打开庞大的VS IDE和项目了。
  • 支持切换不同.NET版本,测试各个版本的能力。
  • 输出非常方便,提供超级Dump扩展方法,可输出任何数据类型,且输出结果显示非常友好,甚至可以直接显示图片、图表。
  • 直接查看IL代码,及编译后的C#代码、机器码,内置了反编译工具ILSpy。
  • 支持安装Nuget包,扩展及其方便。
  • 内置了单元测试工具XUnit,性能测试工具Benchmark,且性能测试非常简单。
  • 强大的正则表达式测试功能。
  • 还有很强大的Linq查询数据库的操作。

唯一的缺点就是——付费,且不便宜,有免费版,但功能太少。有条件的可以下单支持一下,或者用其他某些方式先体验下,Linqpad crack


02、LinqPad简介

1、菜单

  • File:文件操作相关功能。
  • Edit:代码编辑相关功能,还有“preference”(偏好设置)。
  • Query:执行代码相关的功能,还包括Nuget管理、单元测试、性能测试功能。
  • Debug:调试相关功能。

2、资源区域,详见3.2

3、多标签的代码编辑功能

4、代码编辑区域

5、结果输出区域

  • Result:执行结果输出的区域。
  • IL+Native:实时输出的IL代码。
  • Tree:代码解析的语法树,
  • AI:支持OpenAI的智能代码提示、编写,需要APIKey。

每个Query(页签)的代码有一个独立的进程来执行,可以通过菜单栏“Query”》“Kill Process”来强制关闭当前Query代码进程。

6、添加Nuget或引用命名空间F4快捷键打开如下图配置,可添加Nuget包、添加Namespace引用。


03、常用功能

3.1、快速运行代码

支持多种语言模式,C#开发者常用的就是前面三种:

  • C# Expression :C#表达式语句,如果输入多行语句,工具会自动切换模式。
  • C# Statement :C#代码语句(片段),可任意多行代码、方法。
  • C# Program :完整的C#代码模式,和控制台的程序的入口程序Program类似。

可选择不同的.NET版本,最新的LinqPad 8版本支持到最最新的 .NET8、.NET9,如果要运行.NetFramework版本,则要用更老的LinqPad 5版本。

3.2、丰富代码示例,学习进阶

  • Samples”:内置丰富的代码示例,及不同C#版本的语法示例,可用来学习(+练习)C#的新语法知识。这里还有很多C#代码的的最佳实践,好好学习下可以显著提高C#技术。
  • My Queries”:代码可以保存到你本地,个人保存的代码文件都在这里。可用#load "fileName"的语法引用其他文件代码。
  • My Extensions”:这个代码文件中可以定义全局扩展方法,任意地方就可以使用了。

3.3、强大的Dump()输出

Dump()是一个扩展方法,万物皆可Dump()输出,主要作用就是输出内容,可以看做是超级版的Console.WriteLine()。简单的数值、字符、数组,复杂的对象、表格、动态数据都可以友好的输出,甚至Chart图表、图片也是可以的。

下面是一个Chart输出,非常简单方便,做一些简单的统计、可视化很轻松。

double[] xarr = { 1.0, 2.0, 4.0, 5.0 };
double[] yarr = { 2.0, 3.0, 1.0, 4.0 };
//chart dump
xarr.Chart().AddYSeries(yarr,SeriesType.Column).Dump();

3.4、代码调试、分析

支持代码断点调试,操作和VS类似,在行号前面打标记断点即可。更方便的的是实时的代码编译结果,可以查看编译后的C#代码、IL代码,及机器码,这非常方便学习。还内置了ILSpy,快捷键Shift+Alt+R,自动定位到当前代码的位置,当然也支持“F12”转到(ILSpy)源码。

上面的代码写了一个lock锁的简单示例,通过编译后的C#代码、IL代码,很容易发现lock是一个语法糖,实际是是用了混合锁Monitor来实现的。

04、性能测试Benchmark

用LinqPad做性能测试真的是太方便了,使用 BenchmarkDotNet 非常的简单、方便,效率也很高。而在VS中使用 BenchmarkDotNet 有点一言难尽,坑不少。具体可查看《C#中的Benchmark性能测试入门》。

  • 可以直接鼠标选中方法测试(方法无参数),不用专门写测试类、测试方法。
  • 也支持标准的BenchmarkDotNet测试流程,再Main()方法里执行BenchmarkRunner.Run<BenchMarkTest>();

如下代码,实现一个字符串的反序输出,随便写了几个实现,一个是用指针直接操作交换字符值,另个一个是常规的数组操作方式。

  • Inverse_ArrayReverse:用Array的Reverse方法实现翻转,需要创建一个字符数组、一个字符串(返回的)。
  • Inverse_For:for循环翻转。
  • Inverse_Pointer:指针原地翻转,无其他托管内存使用。
string Inverse_ArrayReverse()
{
var str = "123456789";
var arr = str.ToArray();
Array.Reverse(arr);
return new string(arr);
}
string Inverse_For()
{
var str = "123456789";
char[] arr = new char[str.Length];
for (int i = str.Length - 1; i >= 0; i--)
{
arr[str.Length - i - 1] = str[i];
}
return new string(arr);
}
unsafe string Inverse_Pointer()
{
var str = "123456789";
fixed (char* pstr = str)
{
for (int i = str.Length / 2 - 1; i >= 0; i--)
{
var temp = pstr[str.Length - i - 1];
pstr[str.Length - i - 1] = pstr[i];
pstr[i] = temp;
}
}
return str;
}

用Benchmark测试一下性能,在Linqpad上非常简单,选中上面两个方法,菜单“Query”>“Benchmark Selected Code”即可进行测试。

测试结果如下,结果很明显了,这很便于我们做一些性能的对比测试。Inverse_ArrayReverse()耗时更长(71.46 ns),而且还额外消耗更多GC内存(AllocatedBytes 分配的托管内存)。


参考资料


️版权申明:版权所有@安木夕,本文内容仅供学习,欢迎指正、交流,转载请注明出处!原文编辑地址-语雀__

LinqPad:C#代码测试学习一品神器的更多相关文章

  1. phpunit测试学习 2 分类总结断言涉及哪些方面

    11:27 2015/12/9phpunit测试学习 2,  分类总结断言涉及哪些方面先推荐windows快速打开某处路径下的cmd,进入测试状态:可以在文件夹中,按住Shift+鼠标右键,这时候你就 ...

  2. phpunit测试学习 1:一点简单的扼要有用的东西的总结 一点入门认识

    16:45 2015/12/8phpunit测试学习 1:一点简单的扼要有用的东西的总结  一点入门认识 具体的入门安装和入门实践请参照文中的推荐博客或网上其他博客推荐博客,我感觉这几篇博客写得很不错 ...

  3. Spring+SpringMVC+MyBatis+easyUI整合优化篇(三)代码测试

    日常啰嗦 看到标题你可能会问为什么这一篇会谈到代码测试,不是说代码优化么?前两篇主要是讲了程序的输出及Log4j的使用,Log能够帮助我们进行bug的定位,优化开发流程,而代码测试有什么用呢?其实测试 ...

  4. HashMap在JDK1.8中并发操作,代码测试以及源码分析

    HashMap在JDK1.8中并发操作不会出现死循环,只会出现缺数据.测试如下: package JDKSource; import java.util.HashMap; import java.ut ...

  5. Web安全测试学习手册-业务逻辑测试

    i春秋作家:Vulkey_Chen 首先感谢朋友倾璇的邀请 http://payloads.online/archivers/2018-03-21/1 ,参与了<web安全测试学习手册>的 ...

  6. 从别人的代码中学习golang系列--01

    自己最近在思考一个问题,如何让自己的代码质量逐渐提高,于是想到整理这个系列,通过阅读别人的代码,从别人的代码中学习,来逐渐提高自己的代码质量.本篇是这个系列的第一篇,我也不知道自己会写多少篇,但是希望 ...

  7. Selenium自动化:有代码测试与无代码测试。这些你都懂了吗?

    大多数测试人员认为 Selenium是满足其测试自动化需求的自动化框架.作为全球测试人员使用的开放源框架, Selenium 无疑是测试人员适应日趋敏捷的公司的一种好方法.实际上, Selenium仍 ...

  8. Golang学习(用代码来学习) - 第一篇

    package main import ( "fmt" "time" "unsafe" ) //示例代码 var isActive bool ...

  9. Go语言:利用 TDD 驱动开发测试 学习结构体、方法和接口

    环境安装: (新手向)在Linux中使用VScode编写 "Hello,world"程序,并编写测试-Ubuntu20.4 上一篇相关随笔: Go语言:利用 TDD 测试驱动开发帮 ...

  10. PHP代码安全学习笔记V1.0

    PHP代码安全学习笔记V1.0http://www.docin.com/p-778369487.html

随机推荐

  1. 深入理解CPU的调度原理

    前言 软件工程师们总习惯把OS(Operating System,操作系统)当成是一个非常值得信赖的管家,我们只管把程序托管到OS上运行,却很少深入了解操作系统的运行原理.确实,OS作为一个通用的软件 ...

  2. 网站支持https之一:https原理和SSL证书类型

    1 https原理 https加密请求过程 Client和Server之间会进行一下几个步骤的交互: ① Client发送https请求: ② Client和Server通过tcp的三次握手建立连接, ...

  3. BUUCTF---rsa2

    题目 N = 101991809777553253470276751399264740131157682329252673501792154507006158434432009141995367241 ...

  4. 关于项目中 "不能创建大小为 8190 的行,该大小大于所允许的最大行大小 8060 "的处理

    由于产品底层设计的情况,sqlserver  列设置了 可以随用户 创建自动生成 项目特殊,设置的列过多,有三四百列(通常不会过多) 数据无法正常保存,报错"不能创建大小为 8190 的行, ...

  5. Static Timing Analysis Basics

    Preface This note only introduce the essential concepts about Static Timing Analysis, which not cont ...

  6. Cursor入门教程-JetBrains过度向

    Cursor使用笔记 前置:之前博主使用的是JetBrains的IDE,VSCode使用比较少,所以会尽量朝着JetBrains的使用习惯及样式去调整. 一.设置语言为中文 如果刚上手Cursor,那 ...

  7. 【李宏毅机器学习笔记】生成式对抗网络GAN

    [ 李宏毅机器学习]生成式对抗网络GAN 在传统的神经网络任务中,我们通常把一个网络当作一个函数f(x),给定输入x,网络就会输出一个对应的结果 y.比如图像分类任务中,输入是一张图片,输出是一个分类 ...

  8. PHP 实现微信异步回调数据打印知识分享

    一.引言 在微信支付.微信公众号消息推送等场景中,微信服务器会通过异步回调的方式将处理结果发送给我们的服务器.为了便于调试和监控,我们需要获取并打印这些回调数据.本文将详细介绍如何使用 PHP 的 f ...

  9. hadoop部署安装(四)KAFKA+SCALA

    3.8 配置scala 下载,解压 wget https://downloads.lightbend.com/scala/2.13.0-M5/scala-2.13.0-M5.tgz tar -zxvf ...

  10. 学习unigui【29】UniGUI的RBCA

    web程序真是鸡鸣狗盗,零零碎碎. 学习类似SaaS的登录界面,补一大通web的基础知识. http://127.0.0.1:8077和http://127.0.0.1:8077/admin 这是登录 ...