https://zhuanlan.zhihu.com/p/656817283
在编程的世界里看见数学的身影,会让我充满好奇和兴奋。这不,在一年一度介绍.NET新版本的官方开发博客《Performance Improvements in .NET 8》中,我看到了这样一个有趣的算法:可扩展近似计数(Scalable Approximate Counting)。
https://www.cnblogs.com/1996-Chinese-Chen/p/17715870.html
本文主要介绍了如何使用Flaui实现微信自动化,破解Windows微信的本地Sqlite数据库,并使用Openssl和Win32Api获取解密密钥。文章详细解释了如何使用Cheat Engine软件获取微信的静态数据,包括微信昵称、微信号、手机号和所在地区等。同时,文章还介绍了如何使用C#代码获取静态数据,并通过远程注入调用自己编写的库。最后,文章列举了在这个过程中需要用到的所有Win32Api函数,并详细解释了每个函数的用途和参数。
https://www.cnblogs.com/Thayou/p/17717102.html
本文介绍了在.Net 6中使用SkiaSharp生成验证码的过程。作者首先提到在.Net Framework时代,验证码的生成主要依赖于System.Drawing,但这个库依赖于Windows GDI+,不利于跨平台使用。因此,作者选择使用微软推荐的SkiaSharp库。作者详细介绍了如何使用SkiaSharp生成验证码的代码,并在Windows机器上成功运行。然而,在部署到Linux环境时遇到了问题,因为SkiaSharp在Linux上需要一些依赖,而这些依赖在内网环境下难以安装。作者通过使用SkiaSharp.NativeAssets.Linux.NoDependencies这个nuget包解决了依赖问题,但在Linux上生成的验证码没有文字。最后,作者发现Linux上没有字体文件,提出了提供一个字体文件让程序指定读取的解决思路。
https://www.cnblogs.com/baibaomen-org/p/17721587.html
本文深度比较了几种.NET Excel导出库的性能差异,包括EPPlus、NPOI、Aspose.Cells和DocumentFormat.OpenXml。这些库的开源情况、许可证和支持的Excel版本都有所不同。文章还详细介绍了测评电脑的配置,包括CPU、内存、操作系统等信息。为了进行性能测评,作者使用Bogus库生成了6万条标准化的测试数据,并创建了公共类以便于测评使用。通过这种方式,开发人员可以根据实际的性能指标和数据选择最适合自己的电子表格处理库。
https://www.cnblogs.com/baibaomen-org/p/17710883.html
本文介绍了四个常用的序列化和反序列化库,包括System.Text.Json、Newtonsoft.Json、Protobuf-Net和MessagePack-Net,并对它们进行了性能测试。System.Text.Json是.NET Core 3.0及以上版本的内置JSON库,Newtonsoft.Json是.NET中最常用的JSON序列化库,Protobuf-Net是.NET版本的Google's Protocol Buffers序列化库,MessagePack-Net是一个高效的二进制序列化格式。性能测试包括内存分配和执行时间的测量,以及生成随机数据的函数。测试结果显示,System.Text.Json的文件大小为14.3MB,分配内存为1,429,688,200,内存提高为67,392,耗时为2494毫秒。
https://www.cnblogs.com/InCerry/p/dotnet8-access-private-member-new-method-1.html
本文介绍了.NET8中新增的特性UnsafeAccessor,它可以访问私有成员。在.NET8之前,访问私有成员的方法包括反射、Emit和Expression,但这些方法性能较差或代码复杂。而UnsafeAccessor通过定义一个static extern ref方法,并在方法上添加UnsafeAccessor特性,可以直接访问私有成员,性能更好,代码更简洁。此外,UnsafeAccessor还可以访问私有构造方法和私有的方法,提供了更多的可能性。
https://www.cnblogs.com/Can-daydayup/p/17726833.html
本文推荐了一款由C#开源的Windows系统优化工具 - Optimizer。Optimizer功能强大,可以提高计算机性能,加强隐私和安全保护。它支持22种语言,提供了许多实用功能,如关闭不必要的Windows服务、停止Windows自动更新、卸载UWP应用、清理系统垃圾文件和浏览器配置文件、修复常见的注册表问题等。此外,Optimizer还提供了硬件检测工具、IP连通性和延迟测试工具、快速更改DNS服务器、编辑HOSTS文件、识别和终止文件锁定句柄等实用工具。Optimizer的本体只有2M多的大小,不用安装,打开即用。
https://www.cnblogs.com/shanyou/p/17713668.html
.NET平台上的green thread异步模型实验结果表明,虽然在.NET和ASP.NET Core中实现Green Thread是可行的,但Green Thread与现有的异步模型async/await之间的交互非常复杂,因此决定暂停绿色线程试验,继续改进现有的async/await模型。文章指出,.NET的异步编程模型简化了应用程序的异步代码编写,对于增强I/O绑定方案的可伸缩性非常关键。Green thread的目的是简化编程模型,使得所有代码可以以同步方式编写,但仍保持可伸缩性和性能。然而,Green thread与现有的异步模型之间的交互是复杂的,特别是从Green thread代码调用异步方法需要转换到异步代码的同步模式,这在常规线程上不是一个好的选择。
https://www.cnblogs.com/huangxincheng/p/17710972.html
本文主要讲述了作者帮助朋友解决程序内存暴涨问题的过程。首先,作者通过抓取程序的内存dump来分析问题。然后,使用Windbg工具进行分析,通过命令“!address -summary”查看程序的内存使用情况,发现内存使用并不多。接着,通过命令“!eeheap -gc”观察托管堆,发现问题出在托管层。最后,通过命令“!dumpheap -stat”查看托管堆的现状,发现一个1.69G的Free对象占用了大量内存。为了找出原因,作者决定进一步观察这个Free对象的分布情况。
https://www.cnblogs.com/huangxincheng/p/17719366.html
本文主要讲述了作者帮助朋友分析程序内存异常高的问题。首先,作者使用vs诊断工具查看了程序的内存使用情况,发现托管堆的内存占用高达10G+,主要是由于Small object heap的内存占用过高。进一步分析发现,xxxxxxLogEntity对象数量高达5063万,占据了6G的内存。通过使用!gcroot命令,作者发现这些对象的根可能在线程栈里。最后,作者建议进一步观察托管堆,看看哪个对象的占比最大。
https://www.cnblogs.com/InCerry/p/dotnet8-access-private-member-new-method-2.html
本文讨论了.NET8中新增的UnsafeAccessor
的性能测试。通过BenchmarkDotNet
进行测试,包括使用UnsafeAccessor
特性、反射、Emit
+动态方法、表达式树+委托以及直接访问私有成员等方法。UnsafeAccessor
可以方便地访问私有成员,但也存在一些局限性。本文通过实际代码和测试,对其性能进行了深入的探讨。
https://www.cnblogs.com/yyfh/p/mastering-csharp-channels-part-one.html
本文介绍了C#并发编程中的Channel数据结构,通过两个实际案例展示了其使用方法和优势。第一个案例是文件遍历和过滤,通过创建有界和无界的Channel,实现了文件的并行遍历和过滤,提高了程序性能和响应性。第二个案例是Excel文件的读取和翻译,通过异步数据流处理,提高了翻译效率。这两个案例都展示了Channel在解耦任务和提高程序性能方面的优势。
https://www.cnblogs.com/Can-daydayup/p/17723508.html
本文介绍了四款.NET反编译工具:ILSpy、dnSpy、JetBrains dotPeek和JustDecompile。这些工具可以将已编译的.NET程序集转换为易于理解的源代码,帮助开发人员恢复丢失的源代码、理解和分析第三方组件dll、学习其他人的代码、查找修复bug或进行逆向工程。每款工具都有其特点,选择哪一款取决于个人的偏好和需求。同时,文章强调在法律允许的范围内合理使用这些工具,并保护他人的知识产权。最后,文章还提供了一个.NET技术交流群,供开发者分享经验、学习资料和交流问题。
https://www.cnblogs.com/deali/p/17716884.html
本文介绍了在C#上使用ViewFaceCore库进行人脸检测和识别的过程。ViewFaceCore是基于SeetaFace6的.NET人脸识别解决方案,支持年龄预测、眼睛状态检测、性别预测、人脸检测、口罩检测等功能。在C#中使用非常简单,但由于调用了C++的库,部署时可能会遇到一些问题。文章详细记录了如何添加依赖、进行人脸检测、使用ImageSharp图片库等步骤,并提供了相关代码示例。
https://www.cnblogs.com/jevonsflash/p/17712687.html
本文介绍了如何使用.NET MAUI实现实时拖拽排序功能。首先,创建一个.NET MAUI项目,然后在页面中创建CollectionView控件作为Tile的容器。接着,设置DropGestureRecognizer中的拖拽悬停、离开、放置时的命令,并创建IDraggableItem接口,定义拖动相关的属性和命令。最后,创建一个TileSegement类,用于描述磁贴可显示的属性,如标题、描述、图标、颜色等。这样,当拖拽条目放置在另一个条目上方时,即可将条目位置变更,实现实时拖拽排序。
https://www.cnblogs.com/Dotnet9-com/p/17723454.html
本文由沙漠尽头的狼首发于Dotnet9,介绍了如何使用dnSpy调试第三方.NET库源码。dnSpy是一款强大的.NET程序反编译工具,可以在没有源码的情况下调试程序,甚至修改程序。文章通过一个示例程序,详细介绍了如何安装dnSpy,编写示例程序,调试示例程序和.NET库原生方法。此外,dnSpy还能直接监视第三方代码的变量、修改值等,就像使用VS开发自己的程序一样。文章最后,作者提到了如何在没有源码的情况下纠正示例程序中的错误,并预告了下一篇文章将讲解第三方库拦截,实现不修改第三方库达到修改方法逻辑和返回结果的效果。
https://www.cnblogs.com/huangxincheng/p/17722077.html
本文主要讨论了CPU爆高的问题。作者分享了两个案例,通过WinDbg工具进行分析。首先,作者提醒我们,别人说CPU爆高不一定真的爆高,我们需要用数据说话。然后,作者通过观察线程池中的所有工作线程,发现所有线程都在全力运行。通过仔细观察各个线程的线程栈,作者发现最多的是某个方法。这个方法是由线程池工作线程创建的。最后,作者通过分析代码,找出了CPU爆高的原因:一是无脑往线程池丢任务,导致线程增多;二是线程中方法的时间复杂度高。
https://www.cnblogs.com/LinSr/p/17717402.html
本文详细介绍了如何将Unity与Blazor Server结合的过程。首先,创建一个Unity项目并进行发布设置,然后将Unity项目发布为WebGL。接着,创建一个net7.0的Blazor Server项目,并在Program.cs中进行配置,将Unity作为静态文件引入。最后,将Unity项目的Build文件夹拷贝到Blazor Server的项目根目录下,并修改目录名称为BlazorServerTest。完成这些步骤后,启动Blazor Server项目,在地址栏输入相应的URL,即可看到Unity画面。通过这种方式,成功实现了Blazor Server和Unity的结合。
https://www.cnblogs.com/1996-Chinese-Chen/p/17724792.html
本文介绍了.Net 8中的新功能AutoClient,这是一个内置的OpenFeign,可以自动生成代理类,调用远程Api接口。使用AutoClient,我们只需要定义一个接口,添加AutoClient特性,系统就会自动生成一个对应的类。例如,我们定义了一个名为IBussiness的接口,并添加了AutoClient特性,系统就会自动生成一个名为Bussiness的类,包含了我们定义的TestPost方法和路由信息。这个功能使得调用远程Api接口变得更加简单和高效。
https://www.cnblogs.com/anding/p/17625710.html
本文介绍了单例模式,这是一种设计模式,全局或某一作用域范围内只有一个实例对象,可以减少内存开销。单例模式在全局状态vuex,Jquery中的全局对象$,浏览器中的window、document等场景中常见。实现单例模式的关键是保证对象实例只创建一次,后续的引用都是同一个实例对象。实现方式有全局对象、构造函数.静态方法getInstance、闭包-new和ES6模块Module等。全局对象方式简单,但会存在全局污染,不推荐使用。构造函数.静态方法getInstance方式通过构造函数的静态方法来获取实例,唯一实例对象存储在构造函数的instance上。闭包-new方式利用JS的闭包来保存唯一对象实例。ES6模块Module方式中,模块中导出的对象就是单例的,多次导入其实是同一个引用。
https://www.cnblogs.com/powertoolsteam/p/17711691.html
本文介绍了如何在.NET WinForms应用程序中创建流程图。流程图是一种图形化工具,用于展示过程中的事件、决策和操作的顺序和关系。在.NET WinForms中创建流程图的步骤包括设置项目、启用增强形状引擎、添加形状和文本到电子表格流程图、应用样式到形状、分组流程图形状,以及在应用程序中保存并显示流程图。这些步骤可以通过Visual Studio软件和电子表格设计器组件来完成。最后,还可以将创建的流程图导出为Excel文件,或者导入现有的Excel文件流程图。
https://www.docker.com/blog/docker-desktop-4-23/
Docker Desktop 4.23 已发布。
此版本在 docker init 中添加了对 ASP.NET Core 的支持,从而可以更轻松地创建项目中容器化所需的 Dockerfile 和其他文件。
https://devblogs.microsoft.com/dotnet/system-text-json-in-dotnet-8/
.NET 8 中 System.Text.Json 的新增功能。
JsonStringEnumConverter<TEnum>
JsonSourceGenerationOptionsAttribute
功能增强Memory<T>
、ReadOnlyMemory<T>
JsonSerializerOptions
一次性分析器IJsonTypeInfoResolver.WithAddedModifier
JsonSerializerOptions.MakeReadOnly()
JsonNode
的附加功能JsonNode.ParseAsync
APIIAsyncEnumerable
扩展JsonConverter.Type
属性https://devblogs.microsoft.com/nuget/https-everywhere-update/
更新以在 NuGet 上强制使用 HTTPS。
在 NuGet 6.8 中,可以通过在指定源时在“allowInsecureConnections”属性中指定“true”来允许非 HTTP 连接。
https://devblogs.microsoft.com/visualstudio/new-react-typescript-spa-templates-and-more/
在 Visual Studio 2022 预览版中使用 TypeScript 更新了 React SPA 应用程序的模板。
通过使用 Vite,新模板的创建和运行速度将更快,并且还有其他好处。
https://github.com/microsoft/WindowsAppSDK/releases/tag/v1.4.1
Windows App SDK 1.4.1 已发布。
此版本修复了多个错误。
https://azure.microsoft.com/en-us/updates/azure-service-fabric-100-release/
Azure Service Fabric 10.0 已发布。
https://devblogs.microsoft.com/dotnet/csharp-certification-training-series/
推出直播会议来庆祝 freeCodeCamp 推出 C# 认证培训。
https://qiita.com/karuakun/items/def89f1a1fe4e07b2cfd
研究组合 .NET 8、ASP.NET Core 和 Entity Framework Core 时的启动性能。
本文还包括使用 Dapper、普通 ADO.NET 和 NativeAOT 构建的结果。
https://sampruden.github.io/posts/godot-is-not-the-new-unity/
关于C# API调用效率低下的观点,以Godot的raycast部分为例。
https://x.com/reduzio/status/1704875838833897788?s=12
解释 Entity Framework Core 中的急切加载、延迟加载和显式加载。
https://qiita.com/karuakun/items/4f300d84e366a125c60d
关于何时为使用 AddTransient 添加到 Microsoft.Extensions.DependencyInjection 容器的类型调用 Dispose。
https://jenskrumsieck.medium.com/raytracing-in-vulkan-using-c-part-1-997cb284f7e8
有关在 C# 中使用 Vulkan 实现光线跟踪的系列。
https://qiita.com/karuakun/items/4695cfbdfbf623600c98
了解如何为 .NET 8 创建开发容器。
https://qiita.com/nobushi95/items/c4d5877fadef29c16d74
关于 DateTime 自定义格式中的年份 (yyyy
),这取决于 Windows 格式。
https://devblogs.microsoft.com/dotnet/simplifying-fsharp-computations-with-the-new-while-keyword/
关于使用新的“while!”关键字简化 F# 计算表达式。
关于 Visual Studio Enterprise Edition 中提供的新 IntelliTest(测试用例生成)。
新的 IntelliTest 现在支持在 .NET 6 (x64) 上作为预览版运行。
关于使用 OpenTelemetry 和 Grafana 进行日志和跟踪、指标收集和测量。本文还介绍了如何使用自定义跟踪和指标。
https://ufcpp.net/study/csharp/datatype/inline-array/
C# 12 中的新功能 InlineArray 的说明。
https://andrewlock.net/should-you-use-the-dotnet-8-identity-api-endpoints/
.NET 8 Identity API 端点是什么以及是否应该使用它们?
作者表示,.NET 8 发布时可用的版本存在多个问题,无法推荐。
https://blog.neno.dev/entry/2023/09/17/191002
关于哪个线程执行TaskCompletionSource继续处理的注意事项和推荐设置。
如何在 Docker Desktop 中使用 Yarp 作为 Kubernetes 的入口。
https://github.com/Cysharp/PrivateProxy
源生成器,生成用于使用 .NET 8 的 UnsafeAccessor 访问私有成员的代理。
关于尝试在 Linux 上运行 Blazor Hybrid 和 .NET MAUI 的故事。
https://x.com/jsuarezruiz/status/1704037700435611699?s=12
请注意,除非已释放,否则枚举器可能不会释放资源。
https://x.com/steplyakov/status/1703814740374679858?s=12
一种允许您使用 C# 12 集合文字在堆栈上分配特定长度的 Span 的技术。
https://x.com/davidfowl/status/1703437753390924070?s=12
由于笔者没有那么多时间对国内的一些文章进行整理,欢迎大家为《.NET周刊-国内文章》板块进行贡献,需要推广自己的文章或者框架、开源项目可以下方的项目地址提交Issue或者在我的微信公众号私信。
格式如下:
https://github.com/InCerryGit/.NET-Weekly
相信大家在开发中经常会遇到一些性能问题,苦于没有有效的工具去发现性能瓶颈,或者是发现瓶颈以后不知道该如何优化。之前一直有读者朋友询问有没有技术交流群,但是由于各种原因一直都没创建,现在很高兴的在这里宣布,我创建了一个专门交流.NET性能优化经验的群组,主题包括但不限于:
希望能有更多志同道合朋友加入,分享一些工作中遇到的.NET性能问题和宝贵的性能分析优化经验。目前一群已满,现在开放二群。
如果提示已经达到200人,可以加我微信,我拉你进群: ls1075
另外也创建了QQ群,群号: 687779078,欢迎大家加入。
感谢大家对我公众号的支持与陪伴!为庆祝公众号一周年,抽奖送出一些书籍,请大家关注公众号后续推文!