揭秘EF Core批量删除陷阱:90%开发者忽略的性能雷区及规避策略

第一章:揭秘EF Core批量删除陷阱:90%开发者忽略的性能雷区及规避策略

在使用Entity Framework Core进行数据操作时,批量删除是一个高频需求。然而,许多开发者习惯性地采用遍历实体并逐条调用`Remove`的方法,这种做法在处理大量数据时会引发严重的性能问题。

默认删除方式的性能瓶颈

EF Core默认的删除机制是先将目标实体加载到内存,再逐条标记为删除状态,最终通过`SaveChanges`提交事务。这种方式不仅消耗大量内存,还会生成多条DELETE语句,极大降低执行效率。
  • 每次删除操作都会触发变更跟踪
  • 大量数据库往返通信(round-trips)
  • 无法利用数据库层面的批量优化能力

高效批量删除的正确姿势

推荐使用支持原生SQL批量操作的扩展库,如EFCore.BulkExtensions或直接调用`ExecuteSqlRaw`。
// 使用 ExecuteSqlRaw 实现高效批量删除
context.Database.ExecuteSqlRaw(
    "DELETE FROM [Products] WHERE [CategoryId] = {0}", 
    categoryId);
// 该语句直接在数据库执行,无需加载实体

不同方案对比分析

方式性能表现适用场景
循环 Remove + SaveChanges极慢单条或极少量数据
BulkDelete(EFCore.BulkExtensions)极快大批量数据删除
ExecuteSqlRaw 自定义SQL快复杂条件删除
graph TD A[开始删除操作] --> B{数据量大小} B -->|小量(<100)| C[使用Remove] B -->|大量| D[使用BulkDelete或ExecuteSqlRaw] C --> E[SaveChanges] D --> E

第二章:深入理解EF Core批量删除机制

2.1 EF Core默认删除行为与变更跟踪原理

变更跟踪机制
EF Core通过ChangeTracker监控实体状态变化。当实体从数据库加载时,其状态被标记为Unchanged;一旦修改,状态变为Modified,并在SaveChanges()调用时生成相应SQL。
默认删除行为
在关系映射中,若未配置级联删除,EF Core默认采用ClientSetNull策略:外键设为null,子实体在内存中标记为Deleted,但需显式调用SaveChanges()持久化。
context.Remove(parent);
context.SaveChanges(); // 触发删除操作
上述代码执行时,EF Core先删除依赖实体(如有级联配置),再删除主实体。变更跟踪器会递归处理相关对象的状态转换。
实体状态说明
Deleted实体将被从数据库移除
Detached未被上下文跟踪

2.2 单条删除与批量操作的性能对比分析

在数据库操作中,单条删除与批量删除在性能表现上有显著差异。频繁执行单条删除会带来较高的网络开销和事务管理成本。
性能瓶颈剖析
  • 单条删除每次需建立一次SQL执行计划
  • 批量操作可复用执行计划,降低CPU开销
  • 事务提交次数减少,提升整体吞吐量
代码实现对比
-- 单条删除(低效)
DELETE FROM logs WHERE id = 1;
DELETE FROM logs WHERE id = 2;

-- 批量删除(高效)
DELETE FROM logs WHERE id IN (1, 2, 3, 4, 5);
上述批量写法将多条语句合并为一次解析与执行,显著减少I/O往返次数。
性能测试数据对照
操作类型记录数耗时(ms)
单条删除10001280
批量删除1000160

2.3 查询加载模式对删除效率的影响探究

在数据库操作中,查询加载模式显著影响删除操作的执行效率。全量加载模式下,系统需检索全部记录构建对象图,导致高内存占用与延迟。
加载模式对比
  • 懒加载(Lazy Loading):仅在访问关联数据时触发查询,减少初始开销;
  • 急加载(Eager Loading):一次性加载所有关联实体,可能引入冗余数据。
性能测试代码示例

// 使用Hibernate进行批量删除
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();

Query query = session.createQuery("DELETE FROM User WHERE status = :status");
query.setParameter("status", "INACTIVE");
int deletedCount = query.executeUpdate(); // 直接执行,避免加载到内存

tx.commit();
session.close();
上述代码采用HQL直接删除,绕过对象加载过程,显著提升效率。executeUpdate()返回受影响行数,适用于无需业务逻辑处理的场景。
效率对比表
加载模式删除10万条耗时(ms)内存峰值
急加载85001.2 GB
直接SQL/HQL98064 MB

2.4 导航属性级联删除的隐性开销剖析

在实体框架中,导航属性的级联删除看似简化了数据清理逻辑,实则可能引入显著性能开销。当父实体被删除时,ORM 会自动生成并执行多个子实体删除语句,而非单条 SQL 级联操作。
触发机制与执行路径
若未在数据库层面启用外键级联删除,EF Core 将逐个加载关联子实体,再逐一删除,导致“N+1”查询问题。
modelBuilder.Entity<Order>()
    .HasMany(o => o.Items)
    .WithOne(i => i.Order)
    .OnDelete(DeleteBehavior.ClientSetNull); // 客户端处理,引发加载子项
上述配置将禁用数据库级联,EF 必须先查询所有 OrderItem 实例再删除,增加内存与IO负担。
性能对比表
策略数据库负载应用负载
ClientSetNull低高
Cascade(DB级)高低
推荐优先使用数据库级联删除,并通过 OnDelete(DeleteBehavior.Cascade) 显式声明,以降低应用层资源消耗。

2.5 常见误用场景及其性能瓶颈实测

高频小对象分配导致GC压力
在Go语言中频繁创建短生命周期的小对象会显著增加垃圾回收(GC)负担,导致STW时间延长。通过pprof工具可定位高分配热点。

func badExample() {
    for i := 0; i < 1000000; i++ {
        m := make(map[string]string) // 每次创建新map
        m["key"] = "value"
        runtime.GC() // 强制触发GC,用于测试
    }
}
上述代码每轮循环生成新map并强制GC,实测GC停顿累计达数百毫秒。应复用对象或使用sync.Pool降低分配频率。
典型场景性能对比
场景吞吐量(QPS)平均延迟(ms)GC频率(s)
对象复用48,2002.15.3
频繁新建12,6007.90.8

第三章:批量删除中的典型性能陷阱

3.1 N+1查询问题在删除操作中的再现

在级联删除场景中,若未合理使用批量操作,N+1查询问题可能再次浮现。例如,在删除父实体时,ORM默认逐条加载子记录再执行删除,导致频繁数据库往返。
典型触发场景
当执行如下逻辑时:

for (Order order : orders) {
    List<OrderItem> items = entityManager
        .createQuery("FROM OrderItem WHERE order = :order")
        .setParameter("order", order)
        .getResultList();
    for (OrderItem item : items) {
        entityManager.remove(item);
    }
}
每次查询OrderItem均产生一次SQL调用,形成N+1问题。
优化策略对比
策略SQL次数性能影响
逐条删除N+1高延迟
批量HQL删除1显著降低
推荐使用批量HQL:
DELETE FROM OrderItem WHERE order IN :orderIds
,将N+1降至单次执行。

3.2 大数据量下内存溢出与上下文膨胀风险

在处理大规模数据同步时,若未合理控制上下文生命周期,极易引发内存溢出(OOM)。尤其在流式计算或批量导入场景中,对象引用长期无法被GC回收,导致堆内存持续增长。
常见触发场景
  • 缓存未设置过期策略,累积大量实体对象
  • 异步任务持有外部上下文引用,造成闭包泄漏
  • 数据库查询返回巨量结果集,未采用分页或游标机制
代码示例:危险的全量加载

List<User> users = userRepository.findAll(); // 全表加载
users.parallelStream().forEach(this::process);
上述代码在用户量超百万时,会一次性加载所有记录至JVM堆内存。建议改用分页游标或流式处理接口,配合背压机制控制内存占用。
监控指标建议
指标阈值说明
堆内存使用率>75%触发告警
GC频率>10次/分钟可能已存在对象堆积

3.3 事务锁定与数据库死锁的触发条件

在并发事务处理中,事务锁定是保证数据一致性的关键机制。当多个事务竞争同一资源时,若彼此持有对方所需锁,则可能进入死锁状态。
死锁的四大必要条件
  • 互斥条件:资源一次只能被一个事务占用;
  • 占有并等待:事务持有资源并等待其他资源;
  • 不可抢占:已分配资源不能被强制释放;
  • 循环等待:存在事务等待环路。
典型死锁场景示例
-- 事务A
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
-- 此时未提交,继续执行
UPDATE accounts SET balance = balance + 100 WHERE id = 2;

-- 事务B(同时执行)
BEGIN;
UPDATE accounts SET balance = balance - 50 WHERE id = 2;
UPDATE accounts SET balance = balance + 50 WHERE id = 1;
上述操作中,事务A持有id=1行锁等待id=2,事务B持有id=2锁等待id=1,形成循环等待,触发死锁。 数据库系统通常通过死锁检测机制(如等待图算法)自动识别并回滚某一事务以打破僵局。

第四章:高效安全的批量删除实践策略

4.1 利用原生SQL实现高性能批量删除

在处理大规模数据清理时,使用ORM逐条删除记录效率低下。采用原生SQL执行批量删除操作可显著提升性能。
直接执行原生DELETE语句
通过数据库会话直接提交SQL命令,绕过对象加载过程:
DELETE FROM logs WHERE created_at < NOW() - INTERVAL '30 days';
该语句一次性清除30天前的日志,避免应用层迭代,减少网络往返开销。
分批删除以控制锁竞争
为防止长事务和行锁扩散,建议分批次处理:
DELETE FROM logs WHERE id IN (
  SELECT id FROM logs 
  WHERE created_at < NOW() - INTERVAL '30 days' 
  LIMIT 10000
);
每次仅删除1万条记录,配合循环或调度任务逐步清理,降低对在线业务的影响。
  • 原生SQL减少ORM映射开销
  • LIMIT限制单次操作规模
  • 结合索引字段(如created_at)提升查询效率

4.2 第三方扩展库(如EFCore.BulkExtensions)的应用实战

在处理大规模数据操作时,Entity Framework Core 原生方法性能受限。引入 EFCore.BulkExtensions 可显著提升批量插入、更新和删除效率。
批量插入实战
using (var context = new AppDbContext())
{
    var entities = Enumerable.Range(1, 1000)
        .Select(i => new Product { Name = $"Product{i}", Price = i * 10 })
        .ToList();
    
    context.BulkInsert(entities, options => options.BatchSize = 500);
}
该代码将1000条产品记录分批插入,BatchSize=500 控制每次提交量,减少内存占用并提升事务稳定性。
核心优势对比
操作类型原生EF Core耗时EFCore.BulkExtensions耗时
插入1万条~12秒~1.2秒
更新5千条~8秒~0.9秒

4.3 分批处理与异步删除的最佳实践

在大规模数据系统中,直接执行全量删除操作容易引发性能瓶颈。采用分批处理可有效降低数据库负载。
分批删除策略
通过限制每批次操作的记录数,避免长时间锁表:
DELETE FROM logs 
WHERE created_at < NOW() - INTERVAL '30 days'
LIMIT 1000;
该语句每次仅删除1000条过期日志,配合循环调度可平稳清理数据。
异步化处理流程
将删除任务提交至消息队列,由后台工作进程消费执行:
  • 前端服务快速响应,不阻塞主线程
  • 任务失败可重试,提升系统容错性
  • 支持动态调节消费者数量以应对负载变化
结合定时调度器与监控告警,确保清理任务可持续、可观测地运行。

4.4 索引优化与执行计划调优配合策略

在数据库性能调优中,索引设计与执行计划的协同优化至关重要。合理的索引能够显著降低查询成本,而执行计划则反映了查询优化器的选择路径。
执行计划分析
通过 EXPLAIN 命令可查看SQL语句的执行计划,识别全表扫描、索引使用情况及连接方式。
EXPLAIN SELECT * FROM orders WHERE customer_id = 100 AND order_date > '2023-01-01';
该语句输出显示是否使用了复合索引,以及访问类型(如 ref、range)。若未命中索引,需结合查询条件调整索引结构。
索引与查询匹配策略
  • 为高频查询字段建立复合索引,遵循最左前缀原则
  • 避免冗余索引,减少写操作开销
  • 利用覆盖索引减少回表次数
统计信息更新
确保表统计信息准确,使优化器能基于最新数据生成高效执行计划:
ANALYZE TABLE orders;
定期执行此命令有助于优化器正确评估索引选择性,提升执行计划质量。

第五章:总结与未来展望

云原生架构的持续演进
现代应用部署正加速向云原生模式迁移。Kubernetes 已成为容器编排的事实标准,而服务网格如 Istio 正在解决微服务间通信的可观测性与安全性问题。以下是一个典型的 Istio 虚拟服务配置示例:
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: product-route
spec:
  hosts:
    - product-service
  http:
    - route:
        - destination:
            host: product-service
            subset: v1
          weight: 80
        - destination:
            host: product-service
            subset: v2
          weight: 20
该配置实现了金丝雀发布,支持将 20% 流量导向新版本,降低上线风险。
AI 驱动的运维自动化
AIOps 正在重塑系统监控与故障响应机制。通过机器学习模型分析日志和指标数据,可实现异常自动检测与根因定位。某电商平台采用 Prometheus + Grafana + Loki 构建统一观测体系,并引入异常检测算法,使平均故障恢复时间(MTTR)下降 65%。
  • 使用 Prometheus 收集容器 CPU/内存指标
  • 通过 Fluentd 聚合分布式日志至 Loki
  • Grafana 可视化并集成机器学习插件进行趋势预测
边缘计算与低延迟场景融合
随着 IoT 与 5G 发展,边缘节点部署成为关键。下表对比了三种典型部署模式:
部署模式延迟范围适用场景
中心云50-200ms批处理、报表分析
区域边缘10-50ms视频分析、游戏
本地边缘1-10ms工业控制、自动驾驶
利用MATLAB和Excel对逆流双管热交换器的热性能进行分析。.zip 1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 立即下载

相关推荐

工业互联网工控安全与工业质检AI大模型建设方案.pptx

工业互联网工控安全与工业质检AI大模型建设方案.pptx

Spark001---yarn批量kill任务

— 删除所有ACCEPTED任务 for i in yarn application -list | grep -w ACCEPTED | awk '{print $1}' | grep application_; do yarn application -kill $i; done — 删除所有RUNNING任务 for i in yarn application -list | grep -w RUNNING | awk '{print $1}' | grep application_; do y

此心安处是吾乡 2596

通信行业CentOS 7内核网络栈优化:高并发连接下UDP/TCP性能调优与系统资源管理

内容概要:本文聚焦于CentOS 7系统在通信行业高并发场景下的性能调优实践,重点围绕内核网络栈优化展开,涵盖UDP/TCP缓冲区调整、文件句柄与连接跟踪表扩容、TIME_WAIT状态复用、软中断分布优化及tuned工具的自动化调优。通过具体配置参数和实际案例(如VoIP软交换系统)深入解析各项调优措施的设计原理与实施效果,有效解决高CPS下丢包、连接失败等问题,并展望了向云化、eBPF等动态智能调优方向的发展趋势。; 适合人群:从事通信系统运维、网络开发或Linux系统性能优化的技术人员,具备一定操作系统和网络基础知识,工作经验1年以上的中初级工程师。; 使用场景及目标:①应用于软交换、媒体网关、信令网关等高并发通信设备的系统调优;②解决UDP丢包、conntrack表满、TCP连接队列溢出等典型性能瓶颈;③提升系统在小包高频、低时延要求场景下的稳定性和吞吐能力。; 阅读建议:建议结合实际生产环境或测试平台同步验证文中配置,重点关注参数背后的物理意义(如BDP、softirq、conntrack机制),并配合ss、conntrack、dmesg等命令进行调优前后对比分析,确保安全可控地实施变更。

EF Core 关联删除

EF Core 关联删除在SQL Server中支持如下四种行为EF Core 关联实体删除行为总结:DeleteBehavior.CascadeDeleteBehavior.SetNullDeleteBehavior.ClientSetNullDeleteBehavior.Restrict 关联删除通常是一个数据库术语,用于描述在删除行时允许自动触发删除关联行的特征;即当主表的数据行被删除时,自动将关联表中依赖的数据行进行删除,或者将外键更新为NULL或默认值。。 在SQL Server中支持如下四种行为

彭大摩的博客 1756

2024 《计算机网络》实验教学指导书.doc

2024 《计算机网络》实验教学指导书.doc

不平衡电网下自抗扰顺序模型预测PWM整流器控制仿真模型(Simulink仿真实现)

内容概要:本文围绕面向城市空中交通的多无人机路径规划问题展开研究,提出了一套融合全局规划、动态避障与局部协同调整的综合路径规划方法。研究内容涵盖基于改进RRT算法与图论的全局路径规划、基于动态风险场和动态窗口法(DWA)的模型预测控制实现动态避障,以及基于分布式协同控制的多无人机局部路径协同策略。通过Matlab平台构建仿真环境,在多种典型城市交通场景下对所提方法进行了系统性验证,结果表明该方法在路径安全性、编队稳定性与任务效率方面表现优异。文章还深入探讨了算法的创新点与未来研究方向,为复杂城市环境下多无人机系统的自主协同提供了理论支撑与技术路径。; 适合人群:具备自动化、控制理论、计算机科学或相关领域基础知识,从事无人机系统、智能交通、路径规划、多智能体协同控制等方向研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①为城市空中交通系统中的多无人机安全、高效飞行提供可靠的路径规划解决方案;②支持在复杂、动态的城市场景中开展无人机自主导航、编队飞行与协同控制的技术研究与仿真验证。; 阅读建议:建议结合提供的Matlab代码进行实践操作,重点关注算法的具体实现细节、参数配置对性能的影响以及不同仿真场景下的实验设计,以深入理解各模块的集成逻辑与实际应用效果。

EntityFrameworkCore5知识点简要 - 删除数据

软删除: soft delete , 标记为删除 硬删除: hard delete, 从表里删除 DeleteBehavior: Cascade Delete: 级联删除 默认 modelBuilder.Entity<Person>(entity => { entity.HasMany(x => x.Addresses) .WithOne(x => x.Person) .OnDelete(DeleteBehavior.Cascade)...

@笑少 495

【选址和定容】模拟退火改进多目标粒子群算法在分布式电源选址和定容中的应用【IEEE69节点】(Matlab代码实现)

内容概要:本文研究了模拟退火改进多目标粒子群算法在分布式电源选址和定容中的应用,以IEEE69节点配电系统为算例进行仿真分析。通过融合模拟退火算法的强全局搜索能力与粒子群算法的高效局部收敛特性,构建了一种改进的多目标优化算法,用于解决分布式电源在配电网中的最优位置选择与容量配置问题。研究旨在实现多重优化目标,包括最小化网络有功损耗、提升节点电压质量、增强系统运行的经济性与稳定性。文中详细阐述了多目标优化模型的数学构建、算法的改进机制与实现流程,并基于Matlab平台完成了算法编程与仿真验证,结果表明所提方法在求解质量和收敛性能上均优于传统算法。; 适合人群:具备电力系统分析、优化理论基础及Matlab编程能力,从事配电网规划、分布式能源系统优化、智能优化算法应用等相关领域的科研人员、工程师以及高校研究生。; 使用场景及目标:①解决高比例分布式电源接入背景下配电网的科学规划问题;②为新型电力系统中源网协调设计提供有效的优化工具;③为相关领域的科研工作提供可复现、可拓展的算法模型与仿真代码实例,支持进一步的算法对比与功能升级。; 阅读建议:建议读者结合提供的Matlab代码与IEEE69节点标准数据,动手复现实验结果,深入理解算法的参数设置、迭代过程与多目标折衷分析方法,并可根据实际研究需求修改目标函数或引入新的约束条件以适应不同的应用场景。

【EF Core】级联删除行为

RIUMEeV8J的博客 182

避坑指南:群晖DSM 7.X挂载NTFS硬盘,为什么你的SATA口不行?从原理到实战一次讲清

本文深入解析群晖DSM 7.X系统挂载NTFS硬盘的底层原理与实战排查方法,揭示SATA接口权限配置的关键参数(如esataportcfg和internalportcfg),并提供安全修改端口配置的详细步骤。针对不同型号群晖NAS的配置差异,给出替代方案与常见故障排查技巧,帮助用户解决NTFS硬盘挂载问题。

weixin_26757925的博客 256

Python-Opencv中的膨胀和腐蚀

Python-Opencv中的膨胀和腐蚀 腐蚀和膨胀是对白色部分(高亮部分)而言的,不是黑色部分。 膨胀就是图像中的高亮部分进行膨胀,“邻域扩张”,效果图拥有比原图更大的高亮区域。腐蚀就是原图中高亮部分被腐蚀,“邻域被蚕食”,效果图拥有比原图更小的高亮区域。 1.膨胀 膨胀过程是有一个结构元素或者模板去在原图像素比对,当比对过程中,中心像素位置的值根据其八邻域取或运算,或运算为1就取自己的中心值,...

qq_44262417的博客 1万+

Entity Framework Core 关联删除

关联删除通常是一个数据库术语,用于描述在删除行时允许自动触发删除关联行的特征;即当主表的数据行被删除时,自动将关联表中依赖的数据行进行删除,或者将外键更新为NULL或默认值。 数据库关联删除行为 我们先来看一看SQL Server中支持的行为。在创建外键约束时,可以指定关联表在主表删除行时,对依赖的数据如何执行操作。例如下面的SQL语句,[Order Details]表中[OrderID]字段 是...

weixin_30729609的博客 524

从拆解到调试:用CS5523改造旧款车载显示屏的完整记录(MIPI转eDP方案)

本文详细记录了使用CS5523芯片将旧款车载显示屏从MIPI接口改造为eDP驱动的完整过程。通过对比LT8911等芯片,选择CS5523实现低功耗、高兼容性的显示升级,涵盖硬件改造、固件配置及调试技巧,最终成功提升显示效果200%。

web99的专栏 343

EF Core中外键关系的DeleteBehavior介绍(转自MSDN)

Delete behaviors Delete behaviors are defined in the DeleteBehavior enumerator type and can be passed to the OnDelete fluent API to control whether the deletion of a principal/parent entity or t...

1006

Creo报许可证错误License request failed for feature的解决方案

有些朋友用了一段时间打开creo软件,出现icense request failed for feature”错误,这个是Creo许可证出现了问题,一般是许可证文件无效或是已过期,导致Creo软件通信出现故障,就会出现Creo License request failed for feature, Requsesting CreoPMA_SSQ ,Run ptcstatus.bat server status。第三步:键盘按win+R,在运行窗口里输入:cmd,然后点确定。第八步:点击系统,找到系统信息。

Q82556499的博客 3万+

loadStop的原因导致的SSUSP

Total内存值是可用来调度的可用内存,当前可用内存为 0M。 loadSched和loadStop的阈值是根据 Total 内存和节点内存来做限制的。 loadStop 50G,现在有大量作业SSUSP,说明之前某个时间点该节点内存可能有低于50G的时候,导致作业SSUSP,具体是否是这个原因引起的需要用 bjobs -l JobID 看下作业的详细信息。 如果是loadStop的原因导致的 SSUSP,根据loadStop设置的阈值,Total 值高于loadStop值后,将逐步恢复挂起的作业

Blueberry521的博客 664

如何实现关系表的级联删除(ON DELETE CASCADE的用法)

以下面两张表为例:SQL> desc person 名称                                      是否为空? 类型 ----------------------------------------- -------- ------------------------ PERSONID                                  NOT NUL

辰风的专栏--Oracle/ClearCase管理员日记 2万+

BMW Trojan 样本分析

仅用于链接已经删却但是需要方便查阅的原文http://blog.csdn.net/zirconsdu/article/details/7997470 转载请注明出处http://blog.csdn.net/zirconsdu/article/details/8153813。 一些具体数据结构和具体路径隐去。   BMW木马样本分析 摘要 2011年底和某Hunter的谈话涉及到当时新检

zirconsdu的专栏 3910

主外键关联删除(on delete set null和on delete cascade)

主外键关联,当删除的是父表数据,参照这些要删除的数据,Oracle有三种处理方式: 1、禁止删除,也是Oracle默认方法。 2、将参照要删除数据的子表对应数据置空。 3、将参照要删除数据的子表对应数据删除。 对于1,比较容易理解,不解释。 对于2,需要使用on delete set null建立外键约束。实验: create table dept_test (d

bisal的专栏 3万+

基于自适应小波阈值算法的图像去噪

自适应小波阈值算法是一种基于小波变换的方法,它相对于传统的小波阈值去噪方法具有更好的性能和鲁棒性。该算法首先对图像进行小波变换,然后根据小波系数的大小确定一个自适应的阈值,将小波系数与阈值进行比较,大于阈值的系数被保留,小于阈值的系数被置零。在上述代码中,首先选取了小波函数sym4进行小波分解,然后根据标准差计算出阈值,使用wthresh函数进行阈值处理,最后进行反变换得到处理后的图像。该GUI界面与前面的自适应小波阈值算法代码结合,实现了图像的去噪,并提供了可视化的效果。

与其临渊羡鱼,不如退而结网 558

从0入门LocoTrack:6倍加速的SLAM追踪新范式实战指南

传统点追踪方法(如CorrTracker、TAPIR)在处理大规模场景或实时任务时,要么精度不足,要么速度太慢。而LocoTrack通过“局部4D相关性”和“Transformer全局关联”的创新设计,实现了精度与速度的双重突破速度:比现有SOTA方法快6倍,吞吐量高达数万点/秒;精度:在Kinetics、DAVIS等数据集上,定位误差显著低于传统方法;鲁棒性:能应对低纹理、动态场景等复杂环境,这是传统方法的“噩梦场景”。

m0_71589036的博客 95

EF Core的级联删除

级联删除由DeleteBehavior的枚举值来设置: 行为名称对内存中的依赖项/子项的影响对数据库中的依赖项/子项的影响 Cascade 删除实体 删除实体 ClientSetNull 外键属性设置为 null 无 SetNull 外键属性设置为 null 外键属性设置为 null Restrict 无 无 ...

weixin_30700099的博客 988

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

使用on delete cascade和on delete set null建立外键(转)

例如下面这两个表中分别存的时员工的基本信息和公司的部门信息。我们为create table dept(deptno number(10) not null,deptname varchar2(30) not null,constraint pk_dept primary key(deptno));和create table emp( empno number(10) not null,fnam...

wangshuxing的专栏 321

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

ON DELETE CASCADE(级联删除)

在学习oracle过程中,会碰到级联删除的运用,而这往往是和foreign key联系在一起。 引用行为(当主表中一条记录被删除时,确定如何处理字表中的外部码字段): delete cascade : 删除子表中所有的相关记录 delete set null : 将所有相关记录的外部码字段值设置为NULL delete no action: 不做任何操作 on delet

eric_xiong0226的专栏 2447

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

oracle中使用on delete cascade和on delete set null来建立外键

其面我们介绍了创建外键约束时如果使用oracle默认的创建方式,在删除被参照的数据时,将无法被删除,这一点在oracle9i中给了我们更多灵活的选择,我们可是使用on delete cascade和 on delete set null关键字来决定删除被参照数据时是否要将参照这个数据的那些数据一并删除,还是将那些参照这条数据的数据的对应值赋空。 例如下面这两个表中分别存的时员工的基本信息和公司的部...

luoke920 368
上一篇: EF Core查询缓存避坑指南,90%开发者忽略的性能陷阱全解析
下一篇: PHP 8.0 Named Parameters详解:5大应用场景助你写出高质量代码
CompiLume
博客等级 码龄1年 168粉丝 2185原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值