明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 152|回复: 2

[命令] cad.net 布局+WorkingDatabase到底是什么+C#代码在线运行

[复制链接]
发表于 前天 18:32 | 显示全部楼层 |阅读模式
本帖最后由 你有种再说一遍 于 2025-2-6 02:43 编辑

# 在线运行
发现了一个网站,可以去在线运行
可以分享自己的测试代码,
它还可以查看MSIL,例如想知道foreach或者await/async原理
就可以点入IL而不是Run.
嘿嘿
不过超时代码会返回超时.

其实很久之前我都是用AI写代码的了,
因为只需要思路正确基本上AI能自动跑出来.
可能是C#代码很多的原因,连AI都知道怎么写,
某些人居然说C#案例少...微软亲儿子怎么会少呢?

https://sharplab.io

# 布局+WorkingDatabase到底是什么
发现之前写错了布局的获取方式:
https://www.cnblogs.com/JJBox/p/18697838
可能也有不少人跟我一样是遍历块表,
现在更正一下.

明明DBDictionary也是字典,为什么需要转为Dictionary呢?
因为我要保证所有的tr.GetObject前面要加using.这是原则.

那么为什么需要using呢?
因为它是数据库资源,而我们用了数据库就要释放掉它.
而缓存的key最好是字符串,或者ObjectId,
否则就会强引用数据库对象,造成只有缓存释放后,才能跟踪释放对象...
有些例如面域对象,它甚至会给你抛出:遗忘释放对象.

有没有存在例外?
答案是不存在例外.
我处理过一个比较有技巧性的地方就是
如果有ent.IsNewObject新旧都要处理的话,
请把新旧ent后面的操作的函数们全部封装为一个函数,
这样旧ent就可以using了.
它在这里:巧妙的处理释放
https://www.cnblogs.com/JJBox/p/12433735.html

如果不加using,
Rider或者VS会推荐你把foreach改为LINQ,
它是错误推荐,
它是错误推荐,
它是错误推荐,
(重要事情说三遍)
因为它觉得你的对象可以自动释放,
但是其实不行,因为LINQ的select可能是过程的,
例如:
var ent = ids.Select(id => (Entity)tr.GetObject(id))
    .FirstOrDefault(ent => ent.ColorIndex == 1);
这种操作就会令前面几个ent打开之后暂存在非托管堆中,
因为cad有长生命周期的图元,然后遗忘释放了.
我也不知道为什么桌子要这样干呢.

箭头哥在我的逼迫下把全部tr.GetObject都加using了,哈哈
回复

使用道具 举报

 楼主| 发表于 昨天 02:38 | 显示全部楼层
本帖最后由 你有种再说一遍 于 2025-2-6 00:01 编辑

无栈协程和有栈协程

无栈协程
C#/Pythom通过一个大型的实现状态机,
也就是switch来实现的,适合IO密集任务.

有栈协程
go,适合并发和并行任务.
回复 支持 反对

使用道具 举报

 楼主| 发表于 昨天 23:22 | 显示全部楼层
本帖最后由 你有种再说一遍 于 2025-2-6 01:28 编辑

发现剪头哥总是会无意中把对的代码改错了.

string? oldLayout = lm.CurrentLayout;
然后后面有可能删除,然后需要set null;

但是他觉得字符串一开始不为null,
那么删除就用string.Empty来代替.

其实这是错误的,为什么呢?
我: 布局名称可能是""的,如果是的话,岂不是出错了?
他: 布局名称在界面已经防呆,是不能设置成"".
我: 前端防呆,那么后端呢?ARX通过指针绕过去了.
或者某个版本CAD出现BUG了,不防呆了呢?
所以你总是写这种不确定的代码,
而用null不就连测试都不需要测试,就已经是确定的代码了.
所以在确定和不确定之间,选择那个确定的.

感受到了双方因为编程理念不同的battle了吧.
1,using GetObject原则
2,map缓存
3,单一职责
4,确定性代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-2-6 03:00 , Processed in 0.148013 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表