
C#
文章平均质量分 66
Gene Z
坚信「代码能跑就行」但总强迫症式优化到凌晨3点的偏执狂
展开
-
AOT与JIT编译技术对比分析
AOT适用于启动快、资源敏感、确定性强的场景(如移动端、系统级软件)。JIT适用于需要动态优化、长期运行或跨平台的场景(如服务端、浏览器引擎)。实际选择需权衡性能、资源、开发效率等多方面需求。原创 2025-03-31 16:19:45 · 389 阅读 · 0 评论 -
C#中IAsyncDisposable与IDisposable区别
ref structref struct通过严格的栈限制实现内存安全,编译器禁止将其用于可能涉及堆分配的场景(如类字段或异步参数),从根本上防止了无效内存访问的风险。这种设计使得它在高性能代码中既能安全使用,又不会影响一般应用程序的逻辑。原创 2025-03-31 16:10:19 · 401 阅读 · 0 评论 -
C#中ref struct的限制与使用场景
ref structref struct通过严格的栈限制实现内存安全,编译器禁止将其用于可能涉及堆分配的场景(如类字段或异步参数),从根本上防止了无效内存访问的风险。这种设计使得它在高性能代码中既能安全使用,又不会影响一般应用程序的逻辑。原创 2025-03-30 17:34:41 · 421 阅读 · 0 评论 -
Span<T>和Memory<T>原理及应用场景
【代码】Span<T>和Memory<T>原理及应用场景。原创 2025-03-30 17:29:38 · 322 阅读 · 0 评论 -
.NET Core 8配置文件依赖注入教程
在 .NET Core 8 中,将配置文件(如)注入到服务中的常用方法是通过(使用或直接注入配置对象)。原创 2025-03-29 21:17:44 · 232 阅读 · 0 评论 -
stackalloc底层机制与内存安全风险分析
通过栈分配实现高性能内存操作,但需开发者手动管理内存安全。在需要极致性能且能严格保证生命周期的场景下,它是有效工具;但滥用可能导致稳定性问题或安全漏洞。现代 C# 中,结合。是一种在栈内存(stack)而非托管堆(heap)上直接分配内存的机制,通常用于高性能场景。使用可显著降低风险。原创 2025-03-29 13:47:42 · 377 阅读 · 0 评论 -
C# Caller特性实现日志记录方法
特性,可以实现自动捕获调用者信息的日志记录。原创 2025-03-29 13:43:16 · 511 阅读 · 0 评论 -
C# 9+函数指针应用场景解析
C# 函数指针主要服务于需要极致性能、与非托管代码交互或底层控制的场景。虽然其使用范围较窄且需要谨慎处理,但在特定领域(如游戏引擎、实时系统、高性能计算)中,它能显著减少开销并提升控制力。对于大多数日常开发,委托仍是更安全、灵活的选择。原创 2025-03-29 13:36:45 · 251 阅读 · 0 评论 -
解释 C# 过滤器及自定义场景
假设你要开发一个需要用户登录才能访问的 Web API,你可以自定义一个授权过滤器来验证用户是否已经登录。// 自定义授权过滤器类// 这里模拟检查用户是否登录// 假设这是从某个服务获取的登录状态if (!// 如果用户未登录,返回 401 未授权状态码// 控制器类[Route// 自定义授权过滤器类 public class CustomAuthorizationFilter : IAuthorizationFilter {原创 2025-03-25 11:47:31 · 285 阅读 · 0 评论 -
C#中实现深拷贝
手动实现:适用于对象结构简单、类的层次较浅的情况,代码可读性高,但当对象结构复杂时,手动实现会比较繁琐。序列化和反序列化:能处理复杂的对象结构,不过性能相对较低,并且在使用时存在安全风险,建议优先使用。原创 2025-03-25 10:00:48 · 350 阅读 · 0 评论 -
C#闭包概念及潜在问题解析
闭包(Closure)是编程语言中的一个重要概念,它允许函数捕获并持有其外部作用域的变量,即使该外部作用域已经执行完毕。在 C# 中,闭包通常通过匿名函数(如 表达式或委托)实现。闭包的关键在于它不仅能访问外部变量,还能延长这些变量的生命周期。例如:此处, 本应在 方法执行完毕后被销毁,但由于闭包的存在,它的生命周期被延长,与返回的委托绑定。问题:在循环中创建闭包时,所有闭包可能共享同一个变量(而非每次循环的当前值)。示例:原因:所有闭包捕获的是变量 的引用,而非其值。循环结束时 ,因此所有闭包原创 2025-03-25 09:49:06 · 332 阅读 · 0 评论 -
async/await原理与死锁避免方法
始终异步化:从入口到底层,全程使用,避免混合阻塞和异步。库代码优化:在通用库中使用,避免依赖调用方上下文。异步兼容锁:用或Channel替代传统锁。避免同步上下文依赖:在无 UI 或请求上下文的场景(如 ASP.NET Core),可减少死锁风险。原创 2025-03-25 09:20:50 · 317 阅读 · 0 评论 -
C#值类型与引用类型区别详解
在C#中,值类型(Value Type)和引用类型(Reference Type)的核心区别主要体现在内存分配方式、赋值行为以及存储位置等方面。原创 2025-03-24 22:47:48 · 320 阅读 · 0 评论 -
异步请求参数生命周期问题分析与优化方案
通过将资源生命周期管理与请求执行解耦,既可避免提前释放导致的错误,又能提升代码的可维护性和扩展性。异常处理的改进确保了错误信息的清晰传递,同时符合异步编程的最佳实践。异步操作仍在进行,导致请求内容被提前释放。当异步请求尚未完成时释放请求参数会引发。调用方创建formData。语句在方法返回后立即释放。维持formData引用。原创 2025-03-20 16:36:43 · 547 阅读 · 0 评论 -
NET Core 大数据处理
在 .NET Core 里处理 10 万条以上的大数据时,可采用以下几种方式,同时也适用于不同的应用场景。原创 2025-03-19 17:11:29 · 1044 阅读 · 0 评论 -
Parallel.ForEach 原理及最大并行数
如需进一步分析具体场景的优化策略,可提供更多代码细节。原创 2025-03-19 17:09:27 · 256 阅读 · 0 评论 -
foreach 的使用与实现
在 C# 中,若要使一个类的对象能够被foreachMoveNext()CurrentReset()CurrentDispose()即使不显式实现,只要类中有一个,编译器也会允许使用foreach。原创 2025-03-17 18:33:45 · 202 阅读 · 0 评论 -
C#依赖注入接口多实现类注入
C#中的依赖注入支持一个接口有多个实现类,并通过多种方式接收这些实现。具体选择哪种方式取决于你的应用场景和需求。原创 2025-03-17 18:19:06 · 212 阅读 · 0 评论 -
C#中的string 类型
string是引用类型,因为它存储在堆上,赋值时复制引用,并且继承自。尽管它的行为有时看起来像值类型(如不可变性),但它本质上仍然是引用类型。原创 2025-03-17 16:42:50 · 264 阅读 · 0 评论 -
C#多配置文件加载与覆盖机制
【代码】C#多配置文件加载与覆盖机制。原创 2025-03-17 16:36:32 · 339 阅读 · 0 评论 -
C#中的泛型与事件的区别
}// 使用泛型事件varpublisher=newPublisher();}}// 订阅事件varbutton=newButton();}}// 使用泛型类varintBox=newBox{Content=42};原创 2025-03-11 15:02:28 · 662 阅读 · 0 评论 -
C#中的LINQ
数据源类型选择:内存集合操作IQueryable:数据库查询时保持表达式树。原创 2025-03-09 11:29:47 · 556 阅读 · 0 评论 -
基于.net实现Kafka的消息订阅模式
1、新建docker-compose.yaml文件KAFKA_ADVERTISED_LISTENERS: 如果这里使用的是localhost,注意docker的网络桥接需要链接到服务器的IP,否则通过服务器IP无法访问容器中的localhost;2、构建docker容器。原创 2025-03-04 17:51:36 · 586 阅读 · 0 评论 -
C#/.Net MD5对文件加密
【代码】C#/.Net MD5对文件加密。原创 2025-02-28 10:15:19 · 92 阅读 · 0 评论 -
C# 实现单例模式(Singleton Pattern)
Singleton Pattern 属于创造型设计模式,提供一种创建对象的方法,涉及一个单一类的实例,确保一个类只创建一个对象,提供访问唯一对象的方法,可以直接访问,不需要创建。单一类只有一个实例类必须自己创建自己的实例给其他调用对象提供访问该类实例的方法目的:一个类只创建一个实例优点:减少全局使用该类的频繁创建与销毁,节省系统资源,避免对资源的多重占用缺点:没有借口,不可以被继承,与单一职责冲突,一个类应该只关心自己内部逻辑,不关心外部调用实例情况实例应用:多进程多线程,操作同一个文件原创 2020-08-14 18:47:13 · 381 阅读 · 0 评论 -
获取body里的内容并序列化
获取body里的内容并序列化using (var reader = new StreamReader(HttpContext.Request.Body, Encoding.UTF8)){ resultBody = reader.ReadToEnd();}var resultJson = JsonConvert.DeserializeObject<Model>(res...原创 2019-10-09 15:13:25 · 525 阅读 · 0 评论