.NET中SortedDictionary、SortedList和SortedSet

.NET Core / .NET Standard标准库中,命名空间System.Collections.Generic中,一些类是通过包System.Collections分发的。本文分析了该包中不那么基础又有点令人混淆的SortedDictionarySortedListSortedSet这三个类,并对有些相似的SortedListSortedSet进行了一些性能对比。

System.Collections包的源代码位于https://github.com/dotnet/runtime/tree/master/src/libraries/System.Collections

继续阅读“.NET中SortedDictionary、SortedList和SortedSet”

Windows 10如何ping计算机名之mDNS

mDNS(参见RFC 6762)是一种用于本地主机名查询的方式,通过组播地址224.0.0.251(或ff02::fb)上的UDP端口5353运行,可以用于解析.local结尾的域名。mDNS的工作方式与普通DNS类似,但其不依赖一个单独的DNS服务器,而是依靠计算机名的拥有者自行回应该mDNS的请求。Windows 10 1703版本添加了对mDNS的支持(参见:mDNS in the Enterprise),可以通过mDNS的方式获取被ping的计算机名的IP地址。

继续阅读“Windows 10如何ping计算机名之mDNS”

解决GitLab CI中文乱码问题

在中文版Windows操作系统上使用GitLab CI Runner的时候,如果命令行的输出包含中文,则在GitLab中看到的流水线(Pipeline)日志会出现乱码情况。为了解决这个问题,可以在Runner的初始化脚本中插入语句“chcp 65001”,将命令行输出编码设为UTF-8,之后GitLab的流水线日志就能正常显示MSBuild的中文输出了。

继续阅读“解决GitLab CI中文乱码问题”

在Ubuntu上编译多架构Docker镜像

Docker能够在包括ARM64、Power PC等很多不同架构的处理器平台上运行。然而,有些处理器平台上不容易找到可用于构建容器镜像的设备。例如,常见的能够运行Docker的ARM设备包括Raspberry Pi、NAS等,它们通常拥有较小的内存和性能普通的处理器,不太能够胜任构建容器镜像的任务。通过Docker的实验性功能Docker Buildx以及多平台仿真软件QEMU,可以实现在x64平台的Ubuntu操作系统中为多种架构构建Docker镜像。

继续阅读“在Ubuntu上编译多架构Docker镜像”

通过MSBuild任务自动复制DLL文件

在Visual Studio中使用第三方库的时候,若第三方库没有通过NuGet分发,则通常需要自行将DLL文件复制到生成目录才能正常运行程序。通过将文件直接包含到项目中可以自动完成该任务,但会在解决方案资源管理器中看到大量DLL文件。本文介绍一种方法,通过在MSBuild文件(csproj、vcxprj等)中添加目标和任务,实现生成时自动将DLL文件复制到生成目录。

继续阅读“通过MSBuild任务自动复制DLL文件”

UWP应用推荐:Hash Checker

Hash(哈希)算法可用于检验一个文件是否完整、是否遭到篡改。当文件内容发生改变时,其哈希值(也就是哈希算法的结果)通常会发生改变。一些软件的官方下载页面上会提供该软件的哈希值,通过下载的文件哈希值是否符合官方公布的哈希值,可以判断下载的文件是否遭到修改或者发生损坏。尤其是从第三方网站下载软件时,通过校验哈希值可以有效防止下载的文件被植入木马等篡改情况。

在Windows上,要获取文件的哈希值,可以通过系统自带的certutil命令行程序进行。但使用该命令行程序操作繁琐,没有进度指示,而且要校验得到的哈希值正确性需要通过目测或者输入其他命令进行比较,不太方便。而通过一款UWP应用Hash Checker,使用图形界面即可得到文件的哈希值。通过粘贴正确的哈希值,软件会自动进行对比,显示哈希值是否正确。软件支持SHA1、SHA256、SHA384、SHA512、MD5和CRC32哈希算法。

继续阅读“UWP应用推荐:Hash Checker”

安全地向公共电脑上传送文件

在例如打印店这样的场合,存在将文件从自己的设备传送到公共电脑上的需求。传统的方式包括U盘、手机数据线传输等物理存储的方法,以及邮箱、网盘等基于在线账户的方法。由于公共电脑的状态未知,使用物理存储存在被感染病毒的风险,在公共电脑上登录在线账户也存在信息泄露的风险。

使用本站工具箱中的“二维码分享”,可以通过网页建立一个一次性的实时文件共享会话。在该文件共享会话中,任意一个客户端上传的文件的下载链接都会自动同步到其他客户端供下载。该共享会话是一次性的,避免了账户信息泄露的风险。

继续阅读“安全地向公共电脑上传送文件”