我们编写的 .NET 应用程序会使用到各种各样的依赖库。我们都知道 CLR 会在一些路径下帮助我们程序找到依赖,但如果我们需要手动控制程序集加载路径的话,需要了解程序集加载上下文。 解决方法 实际上 .NET 推荐的唯一解决方法是创建新的应用程序域来解决非探测路径下 dll 的依赖问题,在创建新应用程序域的时候设置此应用程序域的探测路径。 - .NET Blog。因为你随时可以指定应用程序的探测路径,所以它可能让你的程序以各种不确定的方式加载程序集,于是你的程序将变得很不稳定;可能完全崩溃到你无法预知的程度。 另外,.NET Core 中已经不能使用此 API 了,这非常好! 来进行合并,如果你愿意,也可以使用 ILMerge: .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖 ---- 参考资料 Loading .NET Assemblies out
Chat Reducer:让 AI 对话突破上下文限制 一句话简介 Microsoft.Extensions.AI 的 Chat Reducer 通过智能压缩策略,在保持对话质量的前提下,有效控制上下文长度 核心价值 ✅ 突破限制:解决 LLM 上下文窗口限制(如 GPT-4 的 8K/32K tokens) ✅ 成本优化:减少输入 token,显著降低 API 调用成本 ✅ 性能提升:缩短上下文长度,加快模型推理速度 在多轮对话场景中,我们面临三大挑战: 挑战 问题 Chat Reducer 方案 上下文限制 超出模型限制导致请求失败 智能压缩到安全范围 成本失控 输入 token 越多费用越高 过滤冗余,只保留必要信息 性能下降 过长上下文增加推理时间 减少处理负担,提升响应速度 典型场景: 长时间客服对话(用户反复咨询) 医疗咨询(需要完整病史) ⚖️ 法律咨询(案情细节不能丢失) 教育辅导(需要追踪学习进度 核心特性: 超过阈值时自动调用 AI 生成摘要 摘要存储在 AdditionalProperties 中 渐进式压缩(新摘要包含旧摘要) 保留完整语义上下文 适用场景: 医疗咨询(完整病史重要)
本篇介绍的安全上下文(SecurityContext)同样是执行上下文的一部分,它携带了的身份和权限相关的信息决定了执行代码拥有的控制权限。 WindowsIdentity WindowsIdentity { get; set; } internal CompressedStack CompressedStack { get; set; } } 由于CAS在.NET Core和.NET 5中不再被支持,所以我们不打算对此展开讨论,所以本篇文章讨论的核心就是SecurityContext的WindowsIdentity属性返回的WindowsIdentity对象,这个对象与一种被称为 从执行上下文角度重新理解.NET(Core)的多线程编程[1]:基于调用链的”参数”传递 从执行上下文角度重新理解.NET(Core)的多线程编程[2]:同步上下文 从执行上下文角度重新理解.NET(Core )的多线程编程[3]:安全上下文
其实在很多应用框架中到处可以看见上下文的概念,包括.NET本身的设计就建立在这种思想上的。实例化的对象默认存在于系统中的默认上下文中,我们可以构建自己的上下文将对象在运行时进行合理的管理。 在ASP.NET框架中比较经典的就是HttpContext上下文对象。 对于ASP.NET每当有新的请求处理时,框架会自动开启新的线程去处理当前的调用,然后这个时候就是需要一个相对于之前操作的独立上下文数据环境,而不是在同一个服务器上的所有线程都是共享的。 上下文运行时环境 对于上下文运行时环境的构建需要考虑到运行时是共享的上下文对象。对于纳入上下文管理的所有对象都需要共享或者说是受控于上下文运行时。 我们可以通过很简单的实现上下文的管理接口,对方法进行控制。 总结:该篇文章只是介绍上下文的作用、原理、优势。下篇文章:“.NET 面向上下文架构模式(实现)”将详细的介绍上下文框架如何开发。
一、前世今生 .NET诞生以来,程序集的动态加载和卸载都是一个Hack的技术,之前的NetFx都是使用AppDomain的方式去加载程序集,然而AppDomain并没有提供直接卸载一个程序集的API,而是要卸载整个 .NET Core中一直没有AppDomain的支持。 但是在.NET Core 3.0中,我最期待的一个特性就是对可收集程序集的支持(Collectible AssemblyLoadContext)。 众所周知.NET Core中一直使用AssemblyLoadContext的API,来进行程序集的动态加载,但是并没有提供Unload的方法,此次升级更新了这方面的能力。 三、Getting Started .NET Core 3.0还没有正式版,所有要使用预览版的SDK完成以下实例。
1.上下文Context、面向切面编程AOP模型分析 在本人的.NET面向上下文、AOP架构模式(概述)一文中,我们大概了解了上下文如何辅助对象在运行时的管理。 上下文主要是在当前线程中开启,然后保持在静态对象的多线程安全访问,最后就是对象的稳定释放。 2.2上下文对象绑定实现 有了上下文之后,如何才能使对象在运行时动态的绑定到上下文中来。 对象在运行时具备多个面,其实在.NET里面我们习惯性的用特性(Attribute)来表达这个概念。 其实特性真正强大的地方在于运行时能动态的获取到,这得益于.NET元数据的功劳。并且动态实例化然后当作普通的对象实例使用。这个观念很多.NET程序员不宜转变。 但是如何框架是在.NET2.0中使用的扩展方法还不能实现,这里我是在ContextModuleBaseObject基类中加了一个类似扩展方法的方式。
将指定的操作分发给指定线程进行执行的需求可以通过同步上下文(SynchronizationContext)来实现。 对于GUI应用来说,这个同步上下文将于UI线程绑定在一起,我们可以利用它将指定的操作分发给UI线程来执行。具体来说,针对UI线程的分发是通过调用其Post方法来完成的。 三、ConfiguredTaskAwaitable方法 我知道很少人会显式地使用SynchronizationContext上下文,但是正如我前面所说,在基于Task的异步编程中,SynchronizationContext 上下文其实一直在发生作用。 但是当它在分发之前会先获取当前SynchronizationContext,并将await之后的操作分发给这个同步上下文来执行。 ?
上下文匹配搜索:每次发起会话时,根据上下文信息在向量存储中搜索最匹配的函数。 模型调用:将匹配的函数传递给语言模型,用于生成更准确的响应。 自定义上下文函数提供者 通过 InMemoryVectorStore 和 ContextualFunctionProvider 实现上下文感知功能选择: using Microsoft.SemanticKernel.Connectors.InMemory } ) ); 此处通过向量存储实现函数嵌入,并根据上下文返回最相关的函数。 ", agentThread).FirstAsync(); message.Display(); 此代码会调用 Agent,通过上下文函数提供者检索相关功能,并生成最终响应,例如总结客户评论。 综上,代码中通过构建 Kernel、定义函数列表以及上下文感知,使得系统能够动态选择最相关的功能,并进行高效调用。这种方式减少了 Token 消耗,同时提升了函数调用质量。
.NET Core中注册数据库上下文代码如下:using Microsoft.EntityFrameworkCore;using TodoApi.Models;//创建 WebApplicationBuilder TodoApi.Models:项目自定义模型(包含 TodoContext 数据上下文和实体类)。 这段代码实现了一个基础的 ASP.NET Core API 服务:使用内存数据库:通过 EF Core 管理 Todo 数据(非持久化)。
近期做了个FlowPortal的技术交流,有个关于流程自动生成的自定义流水号要保存到业务表的问题,当时没准备这块涉及如此底层类库的信息,不得不在这里补充一下。
我们继续学习.NET多线程技术,这篇文章的内容可能有点复杂。在打破常理之后,换一种新的思考模型最为头疼。这篇文章里面会涉及到一些不太常见的概念,比如:上下文、同步域等等。 [王清培版权所有,转载请给出署名] .NET上下文(ContextBoundObject对象) 什么叫上下文,千万别和ASP.NET中的上下文搞混了,这个上下文是个形容词,在不同的场合有不同的意思。 在ASP.NET中的上下文是指Context对象,这个对象基本上包容了HTTP协议的整个生命周期的信息,可以获取到客户端浏览器的一些基本信息,也可以获取到关于HTTP协议的一些信息,等等。 这里所讲的上下文是.NET程序执行的最小逻辑范围,ASP.NET上下文是站在B/S编程模型角度去看待的,而这里的上下文是站在.NET底层运行角度看来的,后者是代码的上下文,前者是整个生命周期的上下文。 在没有接触ContextBoundObject之前我一直以为.NET程序执行的最小逻辑范围是应用程序域(AppDomain),知道了之后才知道另有隐情,上下文是用来确定对象的逻辑归属,在多线程(Thread
作者提出了上下文融合模块来捕捉最重要的上下文特征,目的是提高分割精度。实验结果表明,该方法的F1得分最高,约为99.42%,在同一数据集上mIoU为0.584,优于其他方法。 ? 提出了作者的模型与上下文融合模块,即使在复杂的掌纹图像也能实现较高的精度。通过这种方法,作者在mIoU评分方面取得了不错的成绩。 ? 框架结构 ? 作者的图像分割系统的架构 ? 融合局部和全局上下文特征的上下文融合模块 ? U-Net带有上下文融合模块 ? 实验结果 ? 一些模型的输出图像应用于此问题。作者的网络(Unet-CFM)在复杂的掌纹输入中取得了较好的效果。 ?
前言 在上一篇文章中(Asp.Net Core 轻松学-10分钟使用EFCore连接MSSQL数据库)[https://www.cnblogs.com/viter/p/10243577.html],介绍了 ,并在业务中使用多个上下文对象,通过这两章的学习,你将掌握使用 EFCore 连接 MSSQL/MariaDB/MySql/PostgreSQL 的能力。 由于其设计的独特性(区别于.NetFramework),使得我们非常容易的使用各种开源的、跨平台的产品和中间件,作为普通程序员,通过广泛参与和使用开源产品,是我们义不容辞的责任和义务,这种行为将进一步的扩大 .Net 以上介绍来自官方文档 https://mariadb.com/kb/zh-cn/mariadb-mariadb/ 1.1 首先创建一个 Asp.Net Core WebApi 2.2 的项目 Ron.OtherDB PostgreSQL对很多高级开发语言有原生的编程接口,如C/C++、Java、.Net、Perl、Python、Ruby、Tcl 和ODBC以及其他语言等,也包含各种文档 以上介绍来自 PostgreSQL
所以业务上下文变更需要慎之又慎。 运行程序上下文 大家应该对一句话有印象:(进程/线程)上下文切换开销很大。这里的上下文一般指的就是运行程序的上下文。 这里的通信问题就是进程上下文切换开销大的缘故。 方法/类所在的上下文(作用域) 方法上下文可以理解为方法所在的作用域。类亦如此。 还有一些比较特殊的概念实际上也是和方法上下文相关。 比如worker语言特性中,需要监听message事件,这实质上,就是在当前上下文监听另一个上下文的状态。再比如回调函数。实际上是因为上下文变更后,对原有上下文访问的一种编程手段。 从这个角度看,闭包实质上也是对上下文的一种操作手段:返回一个函数,该函数在当前上下文可以操作闭包上的上下文。 执行上下文:当函数或方法被调用时,它会创建一个执行上下文,这个上下文包括了局部变量、参数、返回地址等信息。在JavaScript等语言中,执行上下文还包括this的值。
进程的上下文 用户级上下文: 正文、数据、用户堆栈以及共享存储区;寄存器上下文: 通用寄存器、程序寄存器(IP)、处理器状态寄存器(EFLAGS)、栈指针(ESP);系统级上下文: 进程控制块task_struct 它们都是 CPU 在运行任何任务前,必须的依赖环境,因此也被叫做 CPU 上下文。 进程上下文切换 ? 每当内核压入一个新的系统上下文层时,它就要保存一个进程的上下文。 特别是当系统收到一个中断,或一个进程执行系统调用,或当内核做上下文切换时,就要对进程的上下文进行保存。上下文切换情况: 一个进程结束,需要从队列中重新选择一个进程运行。 从逻辑上讲,新上下文层的核心栈不同于前一上下文层的核心栈。 这些指令恢复前一上下文层的寄存器上下文和核心栈,使它们和中断发生时的情况一样,并恢复该上下文层的运行。
执行上下文概念 2.执行上下文类型 全局执行上下文 函数执行上下文 eval函数 3. 执行上下文的内容 变量对象 活动对象 作用域链 调用者信息 4.执行上下文的生命周期 创建阶段 执行阶段 销毁阶段 执行上下文概念 执行上下文为我们的可执行代码块提供了执行前的必要准备工作,如变量对象的定义 执行上下文的类型 JS中有三种执行上下文类型: 全局执行上下文:默认的最基础的执行上下文,一个程序只会存在一个全局上下文,它在整个JS脚本的生命周期中都会存在于执行堆栈的最底部,不会被栈弹出销毁。 执行上下文栈 当一个脚本运行起来的时候,可能会调用很多函数并产生很多函数执行上下文,为了管理这些执行上下文,JS引擎就创建了“执行上下文栈”(Excution context stack简称ECS)来管理执行上下文 每当引擎发现一处函数调用,就会创建一个新的函数执行上下文压入栈内,并将控制权交给该上下文,待函数执行完成后,即将该执行上下文从栈中弹出销毁,将控制权重新给到栈内上一个执行上下文。
第一部分:执行上下文 1.javascript在执行一个代码段之前,都会进行这些“准备工作”来生成执行上下文 做了哪些准备工作 ? image.png ? 第二部分:执行上下文栈 执行全局代码时,会产生一个执行上下文环境,每次调用函数都又会产生执行上下文环境。 当函数调用完成时,这个上下文环境以及其中的数据都会被消除,再重新回到全局上下文 环境。 处于活动状态的执行上下文环境只有一个。 其实这是一个压栈出栈的过程——执行上下文栈。如下图: ? 看代码演示 ? ?
什么是上下文?对于一个非IT出身的学生,初次见到上下文这个词着实让我困惑,特别让我想起了学生时代的阅读理解。理解字里行间的逻辑,提炼中心思想。 ? 所以它的上下文分为两种,筛选上下文(即列的上下文)和行上下文。 ? 筛选上下文最容易理解,是纵向的列筛选条件。 比如下面的表中销售量2974的筛选上下文是"2016年-第2季度-拿铁",即对日期列和咖啡种类列的筛选。 ? 行上下文,顾名思义,是要横向的看。最简单粗暴也是最好用的理解方法就是视行上下文=当前行。 关键的语法就在这里了,行上下文不会自动转换成筛选上下文,如果需要转换,要使用Calculate。请记住这条规则。我们试一下把公式外套一个Calculate。 外套Calculate的作用是把Filter中的行上下文(当前行)转换成了以城市为筛选条件的筛选上下文,完成数量>200的测试,再以完成测试后返回的虚拟表来确定最终的筛选上下文。 ?
.NET Core 获取数据库上下文实例的方法和配置连接字符串 目录 .NET Core 获取数据库上下文实例的方法和配置连接字符串 ASP.NET Core 注入 .NET Core 注入 无签名上下文 base.OnModelCreating(modelBuilder); } /* * 其他实现 */ } ASP.NET Core 注入 ASP.NET Core 的数据库注入是最为简单方便的了,在 ConfigureServices 配置即可。 这种情况是上下文存在一个无签名构造函数时,外界使用此构造函数直接实例化上下文。 有签名上下文构造函数和自己new一个上下文 上下文必须具有 DbContextOptions 或 DbContextOptions<T> 的构造函数,建议使用泛型形式。
5000, CheckpointingMode.AT_LEAST_ONCE);//每个5秒执行一次 env.setParallelism(2);//并行度2 参考:https://blog.csdn.net /GrassEva/article/details/120529303 https://blog.csdn.net/weixin_42311821/article/details/90598061