EF Core 9批量删除太慢?深度剖析事务、批处理与复合索引的协同优化

第一章:EF Core 9批量删除性能问题的根源解析

在 EF Core 9 中,批量删除操作的性能问题成为开发者关注的重点。尽管 EF Core 提供了简洁的 LINQ 风格语法来执行数据操作,但在处理大量记录删除时,默认行为可能引发严重的性能瓶颈。

查询执行机制的局限性

EF Core 在执行删除操作时,默认采用“加载-跟踪-逐条删除”的模式。这意味着实体必须先从数据库加载到内存中,再由变更追踪器标记为删除状态,最后生成多条 DELETE 语句提交。该过程不仅消耗大量内存,还导致频繁的数据库往返通信。
  • 实体被完整加载至上下文
  • 变更追踪器对每条记录进行状态管理
  • 生成 N 条独立 DELETE 语句而非单条批量操作

缺乏原生批量删除支持的后果

由于 EF Core 未在默认提供程序中启用真正的批量删除 SQL 生成,开发者常误以为调用 RemoveRange() 即可高效删除大量数据。然而实际执行计划往往表现为低效的逐行操作。
// 示例:看似高效的删除,实则性能低下
var entities = context.Users.Where(u => u.CreatedAt < thresholdDate).ToList();
context.RemoveRange(entities);
await context.SaveChangesAsync(); // 触发多条 DELETE 语句
上述代码逻辑会将所有匹配记录加载到内存,并为每条记录生成单独的 DELETE 命令,严重影响响应时间和数据库负载。

影响性能的关键因素对比

操作方式SQL 生成数量内存占用执行时间(万条数据)
RemoveRange + SaveChanges10,000+高>30 秒
ExecuteSqlInterpolated1低<1 秒
真正高效的批量删除应绕过变更追踪机制,直接执行原始 SQL。推荐使用 ExecuteSqlInterpolated 方法实现无追踪批量操作。
// 推荐:高效批量删除方案
await context.Database.ExecuteSqlInterpolatedAsync($@"
    DELETE FROM Users 
    WHERE CreatedAt < {thresholdDate}");

第二章:Entity Framework Core 9中的批量操作机制

2.1 EF Core 9原生批量删除的实现原理与限制

EF Core 9 引入了原生批量删除功能,通过直接生成 SQL 的 DELETE 语句,绕过实体加载过程,显著提升性能。
执行机制
该功能基于 LINQ 查询表达式构建过滤条件,并在数据库端执行无实体实例化的删除操作。例如:
context.Users
    .Where(u => u.LastLogin < DateTime.Now.AddYears(-1))
    .ExecuteDelete();
此代码不会将用户数据加载到内存,而是翻译为一条等效的 SQL DELETE 语句。
主要限制
  • 不支持级联删除逻辑,需手动处理外键约束;
  • 无法触发 SavingChanges 等上下文事件;
  • 不能用于包含复杂导航属性的查询。
由于跳过了变更追踪器,该操作不可回滚且不适用于需要业务逻辑校验的场景。

2.2 使用ExecuteDelete与ExecuteUpdate提升批量效率

在处理大量数据的删除或更新操作时,传统的逐条执行方式性能低下。Entity Framework 7 引入了 ExecuteDelete 和 ExecuteUpdate 方法,支持在数据库端直接执行批量操作,避免将数据加载到内存。
高效批量删除
context.Products
    .Where(p => p.CreatedAt < DateTime.Now.AddMonths(-6))
    .ExecuteDelete();
该代码直接在数据库中删除六个月前的产品记录,不触发实体加载与变更追踪,显著减少I/O开销。
无须加载的字段更新
context.Categories
    .Where(c => c.Name == "Deprecated")
    .ExecuteUpdate(setters => setters.SetProperty(c => c.IsActive, false));
此操作跳过查询阶段,直接生成 SQL UPDATE 语句,适用于大规模状态标记场景,执行效率提升可达数十倍。

2.3 批处理大小(Batch Size)对性能的影响分析

批处理大小是影响系统吞吐量与延迟的关键参数。较大的批处理能提升数据处理效率,但会增加响应延迟。
性能权衡分析
  • 小批量:降低延迟,适合实时性要求高的场景;
  • 大批量:提高吞吐量,减少I/O开销,但占用更多内存;
  • 过大的批次可能导致GC压力上升和任务超时。
典型配置对比
Batch Size吞吐量 (TPS)平均延迟 (ms)
64120045
2562800120
10244100320
代码示例:Kafka消费者批处理设置
props.put("max.poll.records", 500); // 每次拉取最大记录数
props.put("fetch.max.bytes", 52428800); // 单次获取最大字节数
上述配置控制了每次轮询返回的消息数量和总大小,直接影响批处理行为。合理设置可避免内存溢出并优化消费速度。

2.4 事务控制在批量操作中的关键作用

在批量数据处理场景中,事务控制确保了数据的一致性与原子性。若某一批次中部分操作失败,事务回滚可避免“部分写入”导致的数据污染。
事务保障批量插入的完整性
BEGIN TRANSACTION;
INSERT INTO orders (id, amount) VALUES (1, 100);
INSERT INTO orders (id, amount) VALUES (2, 200);
-- 若第二条失败,整个事务回滚
COMMIT;
上述语句通过显式事务包裹多条插入操作,确保全部成功或全部撤销。
性能与一致性的平衡策略
  • 合理设置事务边界,避免长事务阻塞资源
  • 分批提交(Batch Commit)降低锁持有时间
  • 使用保存点(Savepoint)实现局部回滚
结合数据库特性调整事务粒度,是提升批量操作可靠性的核心手段。

2.5 实战:构建高性能批量删除服务的代码模式

在高并发系统中,直接执行大批量删除操作易导致数据库锁表和性能下降。采用分片异步处理模式可有效缓解此问题。
核心实现逻辑
// BatchDeleteService 批量删除服务
func (s *Service) BatchDelete(ids []int64) error {
    const batchSize = 1000
    for i := 0; i < len(ids); i += batchSize {
        end := i + batchSize
        if end > len(ids) {
            end = len(ids)
        }
        go s.deleteChunk(ids[i:end]) // 异步分片删除
    }
    return nil
}

func (s *Service) deleteChunk(chunk []int64) {
    // 使用带超时的事务执行删除
    ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
    defer cancel()
    s.db.WithContext(ctx).Where("id IN ?", chunk).Delete(&Entity{})
}
上述代码将大批次拆分为每1000条为一组,通过 Goroutine 并行提交删除请求,避免单次操作数据量过大。
关键优化策略
  • 限制每批次处理数量,防止长事务
  • 引入重试机制应对瞬时数据库压力
  • 结合消息队列实现流量削峰

第三章:数据库索引优化理论与实践

3.1 复合索引的设计原则与选择性评估

在设计复合索引时,首要原则是遵循“最左前缀匹配”机制。数据库查询优化器仅能利用索引中从左到右连续的列进行检索,因此高频过滤字段应优先置于索引前列。
选择性评估
选择性越高,索引效率越佳。选择性定义为唯一值数量与总行数的比值。高选择性字段(如用户ID)更适合前置。
示例索引创建语句
CREATE INDEX idx_user_status_created ON users (status, created_at, user_id);
该索引适用于先筛选status,再按时间范围查询,并关联用户ID的场景。其中status选择性较低,但作为高频过滤条件仍可前置。
  • 避免冗余列:不建议在复合索引中包含已被覆盖的主键
  • 控制索引长度:过长的索引增加存储与维护成本
  • 结合执行计划:使用EXPLAIN验证索引实际使用情况

3.2 覆盖索引如何加速WHERE条件过滤与数据定位

覆盖索引是指查询所需的所有字段均包含在索引中,无需回表查询主数据页。当WHERE条件中的字段与SELECT返回字段均被索引覆盖时,数据库可直接从索引节点获取完整结果。
执行效率对比
传统索引需先通过索引查找主键,再回表获取数据;而覆盖索引直接在B+树叶子节点完成数据定位与读取,减少I/O开销。
示例场景
CREATE INDEX idx_status_age ON users(status, age);
SELECT age FROM users WHERE status = 'active';
该查询中,status用于过滤,age在索引中,无需访问数据行。
优势分析
  • 避免随机I/O:减少回表带来的磁盘寻址
  • 提升缓存命中率:索引体积小,更易驻留内存
  • 降低锁争用:快速完成查询,缩短事务持有锁时间

3.3 索引维护成本与写入性能的权衡策略

在数据库系统中,索引能显著提升查询效率,但其维护会带来额外的写入开销。每次INSERT、UPDATE或DELETE操作都需要同步更新相关索引,导致I/O和CPU资源消耗增加。
写入放大效应分析
频繁的索引更新可能引发写入放大问题。例如,单行插入可能触发多个B+树索引的结构调整:
-- 为用户表创建复合索引
CREATE INDEX idx_user_status ON users (status, created_at);
-- 插入操作需同时更新主键索引和状态索引
INSERT INTO users (name, status, created_at) VALUES ('Alice', 'active', NOW());
上述语句执行时,存储引擎需维护主键聚簇索引及二级索引,涉及多页写入与缓冲池刷新。
优化策略对比
  • 延迟构建:批量导入数据后创建索引,减少中间状态维护
  • 选择性索引:仅对高频查询字段建立索引,避免过度索引
  • 使用覆盖索引降低回表频率,平衡读写负载
合理评估查询需求与写入吞吐量,是制定索引策略的核心依据。

第四章:事务、批处理与索引的协同调优方案

4.1 高并发场景下事务隔离级别的选择与影响

在高并发系统中,数据库事务隔离级别的选择直接影响数据一致性与系统性能。不同的隔离级别在读写冲突处理上表现各异,需根据业务场景权衡。
常见隔离级别对比
  • 读未提交(Read Uncommitted):允许读取未提交变更,性能最高但易产生脏读。
  • 读已提交(Read Committed):确保读取的数据已提交,避免脏读,适用于大多数Web应用。
  • 可重复读(Repeatable Read):保证同一事务内多次读取结果一致,MySQL默认级别。
  • 串行化(Serializable):最高隔离级别,通过锁机制完全串行执行,牺牲并发性能。
性能与一致性权衡
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
BEGIN;
SELECT balance FROM accounts WHERE id = 1;
-- 其他事务可在此期间提交更新
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
COMMIT;
上述代码在“读已提交”级别下运行,允许非重复读,但避免了脏读。适用于订单支付等对一致性要求适中的场景。过高的隔离级别会引发大量锁等待,降低吞吐量。
隔离级别脏读不可重复读幻读
读未提交可能可能可能
读已提交否可能可能
可重复读否否InnoDB下通过MVCC避免
串行化否否否

4.2 批处理提交策略与连接生命周期管理

在高吞吐量数据处理场景中,批处理提交策略直接影响系统性能与一致性。合理配置批量大小与提交间隔,可在延迟与吞吐之间取得平衡。
提交策略配置示例

props.put("batch.size", 16384);        // 每批次最大字节数
props.put("linger.ms", 10);            // 等待更多记录的时间
props.put("enable.idempotence", true); // 启用幂等性保证
上述参数控制生产者累积数据的节奏:batch.size限制单批次数据量,linger.ms允许小幅延迟以聚合更多消息,配合幂等性可实现精确一次(exactly-once)语义。
连接资源管理最佳实践
  • 复用生产者/消费者实例,避免频繁创建销毁连接
  • 设置合理的session.timeout.ms与heartbeat.interval.ms,防止误判宕机
  • 使用try-with-resources确保资源及时释放

4.3 基于复合索引的查询计划优化实例分析

在复杂查询场景中,合理设计复合索引可显著提升执行效率。以用户订单表为例,常见查询条件包含用户ID和订单创建时间。
复合索引定义
CREATE INDEX idx_user_order_time ON orders (user_id, created_at DESC);
该索引优先按 user_id 排序,再按 created_at 降序排列,适用于“指定用户按时间倒序查看订单”的高频查询。
执行计划对比
  • 无索引时:全表扫描,耗时随数据量线性增长;
  • 仅单列索引:需回表过滤,仍存在性能瓶颈;
  • 复合索引:索引覆盖查询,避免回表,大幅减少I/O开销。
通过 EXPLAIN 分析执行计划,可观察到使用复合索引后,查询类型由 ALL 变为 ref,并利用了索引下推(ICP)优化,显著降低扫描行数。

4.4 综合调优:从慢查询到毫秒级响应的实战路径

在高并发系统中,数据库慢查询是性能瓶颈的常见源头。通过执行计划分析与索引优化,可显著降低SQL响应时间。
执行计划分析
使用 EXPLAIN 定位全表扫描和临时排序操作:
EXPLAIN SELECT user_id, name 
FROM users 
WHERE created_at > '2023-01-01' 
ORDER BY created_at DESC;
重点关注 type=ALL 和 Extra=Using filesort,表明缺乏有效索引。
复合索引优化
针对查询条件和排序字段建立复合索引:
CREATE INDEX idx_created_at ON users(created_at);
该索引支持范围查询并消除排序,使查询从秒级降至毫秒级。
调优效果对比
优化项优化前优化后
查询耗时1.8s12ms
扫描行数1,000,0005,321

第五章:未来展望与EF Core生态演进方向

云原生数据库集成增强
随着微服务架构普及,EF Core 正逐步强化对云原生数据库的支持。Azure Cosmos DB、Amazon Aurora 和 Google Cloud Spanner 的适配器正在社区中快速发展。例如,在 EF Core 8 中已支持 Cosmos DB 的分区分页查询优化:

// 启用 Cosmos 分区键查询优化
modelBuilder.Entity<Order>()
    .ToContainer("Orders")
    .HasPartitionKey(o => o.TenantId);
编译时模型生成提升性能
EF Core 7 引入的 CompileTimeModel 特性显著降低启动开销。通过预编译实体模型,应用冷启动时间减少约 40%。实际案例显示,某电商平台在启用该功能后,Kubernetes Pod 初始化延迟从 1.8s 降至 1.1s。
  • 使用 dotnet ef dbcontext optimize 命令生成静态模型
  • 需确保实体定义稳定,避免频繁变更
  • 适用于高并发、低延迟场景
智能查询翻译器演进
新一代查询管道支持更复杂的 LINQ 表达式下推。以下操作现在可直接转换为 SQL:
C# LINQ 操作生成的 SQL 特性
Where(x => x.Tags.Contains("sale"))JSON 路径查询(PostgreSQL jsonb)
Select(x => x.Price * x.Quantity)计算列投影,避免客户端评估
可观测性与诊断集成
EF Core 日志系统现已深度对接 OpenTelemetry。通过注入 DiagnosticSource,可实现 SQL 执行链路追踪:

请求链路示例:HTTP API → EF Core Command → Database → Result Streaming

每个阶段均可标注执行耗时、行数、索引命中状态

YOLOv8作物病害检测实战源码 这是一套基于YOLOv8n的农田病虫害目标检测系统,对叶片照片做目标检测,识别健康叶片、褐斑病、白粉病、锈病四类,并给出对应防治建议。全流程纯CPU可跑,配套交付完整Python源码、9章实战教程(md/html/pdf三种格式)、100张自造样本及YOLO标签、训练曲线与混淆矩阵截图、Tkinter界面和答辩PPT。 系统围绕五项功能展开:同一套推理逻辑覆盖图像、视频、摄像头三种来源;图形界面选文件即检测,画面叠彩色框标注病名与置信度,右侧面板同步给出症状与防治措施;检测记录自动写入CSV,统计页一键生成四类病害占比饼图;训练结束自动产出损失与精度曲线;内置防治建议文案库,检测命中即回填面板。 选型用YOLOv8n nano档,参数量约320万、权重约6.2MB,CPU单帧几十毫秒,小样本训练5到8分钟完成。数据由data_gen.py程序化绘制100张叶片图,固定随机种子,重跑分布一致,不依赖公开数据集。依赖全部锁版本,教程第7章整理了19条真实报错及排查方法,第8章给出换模型档、换PlantVillage数据集的迁移路径。 适合做计算机视觉方向课程设计或毕业设计的学生,也适合智慧农业方向想了解检测模型如何落进业务面板的学习者。不需要GPU,不需要系统学过目标检测,教程第3章会按需补齐原理。 使用时先pip install -r requirements.txt装好依赖,download_data.py下载预训练权重,data_gen.py生成样本后train.py训练,完成后用main.py infer批量检测或main.py gui启动界面。 立即下载

相关推荐

数据挖掘实战:决策树 + 聚类 + 关联规则,零 Key 离线可跑(Python 源码)

数据挖掘实战包。用 Python 标准库实现 CART 风格决策树、K-Means 聚类与 Apriori 关联规则,在虚构「星河便利店」会员表和购物篮上跑通分类、分群与购物篮分析,并给出准确率、轮廓系数、支持度/置信度/提升度。零第三方依赖、零 API Key 即可离线跑通。含 4 个样例、离线冒烟、中文 README(含「使用方法」)。均为作者原创可运行源码。MIT。作者 blog.youkuaiyun.com/mtl1994

Entity Framework Core 9 索引优化全解析(百万级数据场景实测)

掌握Entity Framework Core 9 的批量操作与索引优化,有效提升百万级数据场景下的性能表现。通过实测对比揭示高效插入、更新及索引策略的关键优势,适用于高并发数据库应用。方法实用,效果显著,值得收藏。

InstrGap的博客 647

科技中介服务机构在技术供需对接中如何实现服务流程的自动化与标准化?.docx

科技中介服务机构在技术供需对接中如何实现服务流程的自动化与标准化?

产业园区运营负责人如何利用平台实现企业创新需求的精准分析与服务推送?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

产业园区如何高效对接企业技术需求与高校科研成果?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

国央企创新负责人如何快速掌握本地科技资源分布与匹配情况?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

高校技术转移办公室人员在推动成果转化落地过程中,如何实现科技成果的高效推介与价值评估?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

国央企创新负责人如何实现科技成果的精准识别与高效筛选?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

科技中介服务机构如何通过数智工具提升技术需求挖掘的精准度?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

高校技术转移办公室人员如何系统化管理科技成果信息?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

科技中介服务机构如何构建标准化、模块化的智能服务工具?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

政府科技管理者如何在政策支持中更精准地识别和支持高价值科技项目?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

fab-pm-optimizer-python-entry-py39-20261021-v1-1-0

fab-pm-optimizer-python-entry-py39-20261021-v1-1-0

全桥LLC谐振变化器参数设计资料(闭环仿真+参数设计报告)

内容概要:本文档系统性地介绍了全桥LLC谐振变换器的闭环仿真建模与关键参数设计方法,涵盖其工作原理、谐振元件(如谐振电感、谐振电容、励磁电感)的计算与优化流程,并结合Simulink或Plecs等仿真平台构建闭环控制系统模型,重点验证变频控制策略下的软开关实现、系统增益特性、效率优化及动态响应性能。资料包含完整的仿真模型、参数设计报告、数学计算书及参考文献,支持从理论分析到工程实践的全流程研究,适用于高频高效DC-DC变换器的研发与教学应用。; 适合人群:电力电子、电气工程及其自动化等相关专业的高校学生、科研人员,以及从事开关电源、新能源变换器、工业电源研发的工程技术人员,具备电路拓扑基础与仿真软件操作能力者更佳。; 使用场景及目标:①深入掌握全桥LLC谐振变换器的工作机理与谐振参数设计准则;②学习并实现闭环反馈控制系统的建模与稳定性分析;③支撑科研课题、课程设计、毕业设计或实际产品开发中的拓扑选型与性能验证需求;④通过仿真与计算联动提升对软开关技术与效率优化的理解与应用能力。; 阅读建议:建议结合所提供的仿真文件与设计文档同步操作,按照“建模—参数计算—仿真验证—性能分析”的流程逐步推进,重点关注频率调节对ZVS/ZCS实现的影响,对比不同负载条件下的闭环响应差异,深化对谐振腔特性和控制策略协同作用的理解。

PSIM-三相维也纳VIENNA整流器电压电流双闭环+中点电位平衡SVPWM控制仿真

内容概要:本文档详细介绍了一种基于PSIM软件实现的三相维也纳(VIENNA)整流器仿真模型,重点实现了电压电流双闭环控制与中点电位平衡的SVPWM调制策略。该仿真系统通过精确的控制算法有效提升了整流器的功率因数,降低了输入电流谐波含量,并解决了三电平拓扑中常见的直流侧中点电位偏移问题,具有较高的工程实用价值,适用于高效率、高功率密度的电力电子系统设计与科研验证。文档还整合了丰富的配套资源,涵盖多种电力电子变换器拓扑结构、先进控制算法及典型应用场景,形成了系统化的技术资料体系,有助于深入理解现代整流技术的核心原理与发展动态。; 适合人群:面向从事电力电子、电气工程、新能源变换系统等领域的科研人员、高校研究生以及具备一定仿真基础的工程技术人员。; 使用场景及目标:①深入研究三相VIENNA整流器的工作机理与控制特性;②掌握电压外环、电流内环双闭环控制结构的设计方法;③理解并实现SVPWM调制技术与中点电位平衡控制策略的协同作用;④开展相关控制算法的仿真验证、性能优化与实验对比,为高性能整流装置的研发提供理论支撑和技术原型。; 阅读建议:建议结合文中列出的其他仿真案例(如PWM整流器、LLC谐振变换器、DAB变换器等)进行横向对比学习,充分利用所提供的PSIM、MATLAB/Simulink等多平台仿真资源,重点关注控制逻辑与主电路的耦合关系,通过参数调试与波形分析深化对系统动态响应和稳态性能的理解,强化“理论—建模—仿真—优化”的闭环研究能力。

产业园区运营负责人如何利用数智工具提升园区企业的技术对接效率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

政府科技管理者如何提升区域科技成果转化项目的评价与筛选效率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

ICD10 openGauss版

ICD10 openGauss版

上一篇: (C++20 Ranges性能优化全曝光):科学计算场景下的基准测试与调优策略
下一篇: 跨语言通信性能瓶颈怎么破?一文搞懂Named Pipe+MessagePack在C#/Python中的最佳实践
FastProceed
博客等级 码龄1年 143粉丝 2005原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值