Anduin Xue
Anduin Xue

Anduin's Tech Blog

C#


Build a common cache service for your C# app.

该代码展示了如何为缓存功能编写单元测试,涵盖了基本缓存、带条件的缓存、空值处理、缓存清除以及选择器的应用。每个测试方法使用不同的数据点和场景来验证缓存的行为,包括首次加载时的慢响应时间、命中缓存后的快响应时间,以及对特定条件和边缘情况(如空值)的正确处理。这些测试确保了缓存机制在各种情况下都能正常工作,并覆盖了常见的缓存应用场景。--DeepSeek

ASP.NET Core C# .NET Core Performance Caching .NET Cache MemoryCache

Restore a deleted branch from Azure DevOps using it's SDK

这篇文章介绍了如何通过 Azure DevOps SDK 恢复删除的分支。文章从配置 Git 客户端开始,展示了如何安装必要的 NuGet 包以及编写代码来实现分支恢复功能。关键步骤包括使用 `GitHttpClient` 搜索推送记录、获取删除前的分支引用信息,并通过更新引用将分支重新还原。最后,文章提醒读者可以通过本地 `git fetch` 命令验证恢复结果。这种方法避免了手动操作,能够更高效地管理代码仓库的历史版本。 如果你正在寻找一种自动化的方式来恢复误删的分支,这篇文章提供了一个清晰的技术实现方案。此外,它还启发我们思考如何利用 Azure DevOps 提供的丰富 API 接口来优化日常开发流程中的其他问题。你是否也在面临类似的代码管理挑战?不妨尝试通过这种方式来解决问题,看看它能否提升你的工作效率。--DeepSeek

C# git Azure Azure DevOps SDK Git Branch Restore

Programmatically connect to the remote server via SSH and execute remote command.

本博客介绍了一种通过编程方式使用SSH协议连接远程服务器并执行命令的方法。作者分享了使用.NET Core和SSH.NET库实现这一目标的具体步骤,包括创建新的控制台项目、安装必要的依赖库以及编写连接和执行命令的代码示例。文章还展示了运行结果,并提供了进一步探索的方向和资源链接。通过本文,读者可以学习如何自动化管理服务器任务,同时思考是否可以将此方法扩展到更多系统或更复杂的操作中。你是否也想尝试用代码远程控制服务器?或者你认为这种方法还能应用在哪些场景中呢?--DeepSeek

C# .NET Core bash Linux SSH Renci.SshNet

Use JetBrains code quality analyzer to prevent checking-in bad C# code

这篇文章介绍了如何使用JetBrains的代码质量分析工具来防止在C#项目中提交低质代码。通过集成JetBrains的ReSharper和Rider工具到CI/CD流程中,可以在开发阶段自动检测潜在问题,从而提升代码质量和可维护性。文章详细讲解了如何在Azure DevOps管道中配置代码质量检查,并提供了GitHub Actions的实现方法,同时分享了在本地运行代码质量检查的解决方案,甚至无需购买JetBrains软件即可完成这项工作。最后,文章还介绍了如何通过创建.editorconfig文件来调整检查规则,以避免误报或不符合项目需求的情况。这些方法不仅能够帮助开发者快速发现和修复问题,还能显著提高开发效率。你是否还在为代码质量问题头疼?不妨试试这些工具,让开发过程更加顺畅!--DeepSeek

C# Azure DevOps JetBrains Resharper Code Quality Pipelines

C# run tasks in a threads pool with fixed size

这篇文章介绍了一种在C#中实现多任务处理队列的方法,允许用户以并行方式执行下载任务或其他异步操作。通过CannonQueue类,可以控制最大并发任务数,并支持依赖注入和日志记录功能。该方法提供了两种使用方式:一种是将任务添加到队列后立即启动任务池,另一种是在最后统一启动任务池以指定更大的并发数量。同时,CannonQueue还支持依赖服务的场景,例如Entity Framework上下文的获取与释放,并通过依赖注入框架进行管理。用户可以根据需要注册为单例服务,并在ASP.NET Core中使用该服务实现高效的异步任务处理和数据库操作。--DeepSeek

C# Async Task Multi-Threading async programming task queue

ASP.NET Core Integration Test using MSTest

这篇文章探讨了如何在ASP.NET Core项目中使用MSTest进行集成测试,而不仅仅是依赖官方文档中提供的xunit示例。作者通过实际步骤展示了如何替换xunit并配置MSTest来完成相同的任务。文章首先介绍了从项目结构中移除xunit并安装MSTest的过程,接着详细说明了如何在测试项目中启动ASP.NET Core服务器,并使用HttpClient进行请求测试。最后,作者强调了测试清理的重要性,确保每次测试后正确停止和释放服务器资源。这篇文章不仅为读者提供了一种替代方案,还激发了读者思考为什么选择MSTest而非xunit,以及在实际应用中可能需要注意哪些问题。通过阅读本文,读者可以深入了解如何灵活配置不同的测试框架,并在自己的项目中实现高效的集成测试。--DeepSeek

ASP.NET Core C# .NET Core Test MSTest Functional Test Integration Test

Fire and forget in ASP.NET Core with dependency alive

这篇文章探讨了在ASP.NET Core中实现"Fire and Forget"模式时可能遇到的问题以及如何通过依赖注入和生命周期管理来解决这些问题。作者指出,在控制器中直接使用`Task.Run()`启动长时间运行的任务可能会导致依赖对象过早释放,从而引发不可预知的结果。为了解决这一问题,文章提出了一种新的解决方案:创建一个单例服务(CannonService),该服务能够确保任务执行过程中所需的依赖始终保持存活状态。通过这种方式,不仅可以避免依赖被意外释放的问题,还能实现异步任务的非阻塞执行。 文中详细介绍了如何构建和注册这个CannonService,并展示了如何在控制器中使用它来执行需要长时间运行的任务(例如发送确认邮件)。此外,作者还提供了相关的NuGet包资源,方便开发者快速集成这一解决方案到实际项目中。 文章最后提醒读者,在使用"Fire and Forget"模式时,除了关注依赖生命周期的管理外,还需要考虑任务失败后的错误处理机制以及日志记录的重要性。同时,作者提出了几个值得思考的问题:在实际应用场景中,哪些情况最适合使用"Fire and Forget"模式?如何平衡异步任务的执行效率与系统资源的占用?这些问题不仅帮助读者更好地理解文章内容,也激发了对相关技术更深层次的探索和实践。--DeepSeek

ASP.NET Core C# Async Fire and forget dependency injection singleton service

How to serialize JSON object in C# without Newtonsoft Json

这篇文章探讨了在无法使用 Newtonsoft.Json 包的情况下如何在 C# 中进行 JSON 对象的序列化和反序列化。通过提供一个自定义工具类 `MyJsonConverter`,展示了利用内置的 `DataContractJsonSerializer` 实现这些功能的方法,并附有代码示例以验证其有效性。文章最后提出了一些问题,如“在没有第三方库支持的情况下,如何高效处理复杂的 JSON 数据?”以及“除了避免版本冲突,还有哪些场景适合使用这种方法?”,旨在激发读者的兴趣和进一步思考。--DeepSeek

C# JSON .NET Newtonsoft.Json JSON handling Custom JSON solution

C# Rotate the square matrix

这篇文章探讨了一个在C#中旋转正方形矩阵的实现方案,并分享了一种高效的方法来完成这一任务。作者通过一个具体的例子展示了如何将一个4x4的二维数组顺时针旋转90度,同时详细解释了其中的关键思路和代码逻辑。文章中的核心方法`Rotate`采用了分层处理的方式,每一层都从外向内逐步进行旋转操作,并通过递归实现了这一过程。关键函数`RotateItem`则负责将矩阵中的每一个元素按顺时针方向移动到正确的位置。 作者还分享了在编写过程中的一些思考,比如如何确保元素的正确替换以及如何避免重复覆盖数据。这种方法不仅适用于4x4的矩阵,也可以扩展到任意大小的正方形矩阵。文章最后邀请读者思考:是否还有其他方法可以实现同样的效果?或者是否可以通过优化来减少内存占用或计算复杂度? 这篇文章不仅为需要处理矩阵旋转问题的开发者提供了一个可行的解决方案,还通过代码示例和逻辑分析,帮助读者更好地理解这一算法的核心思想。此外,作者提出了一个值得深思的问题:在更广泛的场景中,这种分层处理的方法是否可以应用到其他类型的变换或数据结构优化中?这个问题不仅为读者提供了进一步探索的方向,也激发了对矩阵操作的更多可能性进行畅想的兴趣。 通过这篇文章,读者不仅可以学到如何旋转正方形矩阵,还能从中体会到算法设计中分治思想的魅力。你是否曾经思考过类似的矩阵操作问题?或者是否有其他更高效的实现思路?不妨在阅读后继续探讨这些问题,并尝试自己动手实践,寻找属于你的解决方案!--DeepSeek

C# Algorithm Matrix Math Matrix Rotation C# Implementation

Creating a proxy to another URL with ASP.NET Core

这篇博客介绍了如何在 ASP.NET Core 中实现一个简单的 HTTP 代理逻辑,使你的项目能够将请求转发到任意目标 URL。通过创建 `CreateProxyHttpRequest` 和 `CopyProxyHttpResponse` 扩展方法,你可以轻松地将用户的原始请求转换为可重用的 `HttpRequestMessage` 并发送给目标服务器,同时将目标服务器的响应结果返回给用户浏览器。文章通过示例代码展示了如何在控制器中使用这些扩展方法实现一个简单的代理功能,并验证了其有效性。 这篇文章不仅帮助开发者理解 HTTP 代理的基本原理,还提供了一个灵活且可扩展的解决方案,适用于需要跨域请求或访问受限资源的场景。你是否也在寻找一种高效的方式来处理复杂的网络请求?通过本文的方法,你可以快速构建自己的代理逻辑并根据实际需求进行定制化开发。--DeepSeek

ASP.NET Core C# Reverse Proxy Web Proxy HTTP Proxy

EF second layer cache to enhance your SQL database performance based on Redis

文章介绍了在ASP.NET Core应用中使用Entity Framework Core进行数据库查询优化的方法,特别是通过添加二级缓存来提升性能。文章首先介绍了内存缓存的实现方法,使用了EFCoreSecondLevelCacheInterceptor库,并详细说明了如何配置和使用该库。接着,文章扩展到Redis分布式缓存的应用场景,介绍了如何安装必要的NuGet包(如EasyCaching.Redis),并展示了如何在应用程序中配置Redis缓存提供程序以替代内存缓存。最后,文章提到了如何在appsettings.json文件中添加Redis的连接信息,并通过Azure Redis Cache示例说明了如何获取必要的配置参数。整个过程无需修改业务代码即可显著提升应用性能,展示了使用Redis作为分布式缓存的优势。--DeepSeek

ASP.NET Core C# SQL Server SQL Entity Framework Core Azure Redis Caching Cache

Get unique random numbers in C#

该文章提出了一种利用RSA加密原理生成唯一随机整数的方法。作者通过分解大数N为两个质因数p和q,计算出私钥指数d,使得每个输入i经过模幂运算后得到的结果都是唯一的。这种方法确保了生成的随机数在指定范围内既不重复又覆盖所有可能值。文章详细解释了各个函数的作用,包括分解大数、验证参数有效性以及生成随机数序列,并提供了测试代码来验证方法的有效性,确保每个随机数的唯一性和正确性。--DeepSeek

C# .NET Core Algorithm Random Numbers Unique random Non-repeat Random