当前位置: 首页 > news >正文

遇到一个口头机遇的答辩准备2(ai告诉的要点)

代码处理的过程,其实已经不是当时的过程了。算是事后的整理过程吧


先来问下CAD二开要点,ai给出了以下十一点:

一、核心原则

一些操作必须包 Transaction(事务,音标:/trænˈzækʃn/)

增删改图形必须用事务

ForRead写用ForWrite

用完自动释放:using(Transaction tr = ……)

看到这里感觉using(Transaction tr = ……)很眼熟,之前写的也用了很多,大概当时也是知道是事务(因为注释有写)。

using(……){……}这部分是C#的,与CAD没有关系,作用是:自动释放资源(防止内存泄漏)

Transaction这部分是CAD的 API(AutoCAD数据库事务,例如:ldb.TransactionManager.StartTransaction()来自Autodesk.AutoCAD.DatabaseServices,作用是给CAD图纸开一个事务

但是好奇既然他这里给出的Transaction tr = ……说明赋值符号后面可能有变,于是又问了一嘴,他其实是cad的事务类型哦,cad能创建事务的方法有3

db.TransactionManager.StartTransaction()普通新事务,比如:画图、改图、删图、读图(99%第时间都用这个,最安全)

db.TransactionManager.StartTransaction(TransactionFlags.None / NoFlush / NoNotification / NoLocking)带参数的普通事务

TransactionFlags.None默认,正常事务。

TransactionFlags.NoFlush不立即刷新数据库(批量优化,减少频繁刷新,1W条以上)。

TransactionFlags.NoNotification不触发对象事件(ObjectAppended…),不触发任何通知。

TransactionFlags.NoLocking不加锁(极危险,只读极端优化)。

db.TransactionManager.StartTopTransaction() 嵌套事务,创建顶层事务,不管嵌套多少层,她永远是最外层,只有顶层事务Commit()才真正写入数据库,嵌套事务内部用

db.TransactionManager.StartOpenClosedTransaction()重新打开已经关闭(Abort/Commit)的事务,极底层、极特殊,永远不会在业务代码里用,用于CAD内部撤销/重做机制

这时候就开始好奇那前面的是固定的么?问了下ai是固定的。第一个db很好猜,是数据库,第二个TransactionManager事务管理器,他管理事务的创建、嵌套、关闭。

嵌套事务工作从上到下:

StartTopTransaction(最外层)==>Transaction==>Transaction(ActiveTransaction,当前)

只有TopTransaction.Commit()真正写入数据库,内层Commit只是“标记完成”(当前层ok,不是真正提交),任意一层Abort()都是全部作废整个事务树全部回滚,所有修改全部作废,不是仅当前层回滚)。

TransactionManager,除了这几个新建事务以外,还有3个核心的获取已有事务,分别是:

db.TransactionManager.TopTransaction获取当前已存在的顶层事务

db.TransactionManager.AllClosedTransactions返回一堆已关闭的旧事务列表

db.TransactionManager.ActiveTransaction获取别人的事务

所以结论是New出来的才能using,Get出来的绝对不能using

不能跨事务持有对象

OnjectId可存,Entity/Polyline不能长期持有

必须再正确上下文

命令里跑:[CommandMethod]

不能在多线程直接操作CAD数据库

异常必须捕获

避免CAD崩溃、卡死

二、最常用命名空间

using Autodesk.AutoCAD.ApplicationServices; // 文档、应用 using Autodesk.AutoCAD.DatabaseServices; // 图元、事务、图层 using Autodesk.AutoCAD.EditorInput; // 选择、输入、命令行 using Autodesk.AutoCAD.Geometry; // 点、坐标、矩阵 using Autodesk.AutoCAD.Runtime; // 命令注册、异常

三、标准模板

[CommandMethod("MyCmd")] public void MyCommand() { Document doc = Application.DocumentManager.MdiActiveDocument; Database db = doc.Database; Editor ed = doc.Editor; using (Transaction tr = db.TransactionManager.StartTransaction()) { // 1. 获取模型空间 BlockTableRecord ms = tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord; // 2. 画图/改图 // ... tr.Commit(); // 提交才生效 } }

灰色划掉部分是核对官网发现没有的,去核对官网是因为发现ai说的有前后冲突,提出之后说是混淆了C++的api……

http://www.jsqmd.com/news/582112/

相关文章:

  • 2026最新西南考银行培训推荐!贵州/贵阳优质银行招考培训权威榜单 - 十大品牌榜
  • 突破Windows远程桌面限制:RDP Wrapper Library全方位应用指南
  • P1884 [USACO12FEB] Overplanting S
  • 如何避免机械拼凑式的基金申请书撰写
  • idea比对两个文件差异
  • 随笔其二
  • 基于蓝牙及GSM的智能防盗系统设计与实现
  • 2026全自动三坐标测量机品牌实力榜单:谁更值得选? - 品牌推荐大师
  • 华硕笔记本终极性能控制指南:用GHelper取代臃肿的Armoury Crate
  • 3步掌握创意工坊壁纸高效获取工具
  • 2026届毕业生推荐的十大AI写作助手推荐榜单
  • 3个核心价值:Tiktokenizer如何解决AI开发中的令牌管理难题
  • 佰力博压电 d33-F(动态力)测试:精准表征压电材料动态性能
  • 2026最新西南银行备考/银行招聘培训推荐!贵阳地区优质机构权威榜单 - 十大品牌榜
  • AgentCPM-Report轻量化部署方案:Pixel Epic镜像免环境配置快速上手指南
  • 2026最新舞蹈艺考培训学校推荐!云南昆明优质机构权威榜单发布 - 十大品牌榜
  • 面向对象进阶 继承
  • Windows系统下Docker Desktop环境的完整迁移方案,包含镜像、容器和数据卷的备份恢复方法 将笔记本上Docker Desktop 东西迁移本地PC 电脑Docker Desktop上
  • 第三方系统集成若依权限校验
  • 【Python实战】搭建AI数字人对话系统:从语音识别到虚拟形象的全流程实现
  • 【数据要素+数据资产合集】100余份数据要素+数据资产方案资料合集(PPT+WORD)
  • MJh代码混淆实战指南:使用Obfuscar构建坚不可摧的安全防线
  • 基于Matlab的轴承-空心转轴-飞轮不同耦合类型动力学分析
  • N_m3u8DL-RE:跨平台流媒体解决方案的全方位技术指南
  • JPEGView:Windows平台终极快速图像查看器完全指南
  • 谭待在养虾之城说了两件事,Seedance 2.0公测与ArkClaw场景化落地
  • 喧嚣过后,重塑「数字光环」:后 315 时代的 GEO 合规新纪元
  • 2026最新艺考培训机构推荐!云南/昆明优质艺考机构权威榜单发布 - 十大品牌榜
  • Python爬虫入门实战——从环境搭建到数据抓取(新手友好版)
  • 机械识图:半剖视图