- 积分
- 13326
- 明经币
- 个
- 注册时间
- 2015-8-18
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
本帖最后由 你有种再说一遍 于 2025-3-25 16:03 编辑
发现很多人设计错了.
箭头哥就把配置都分拆写成多个静态变量,
然后说:这是进程级别的...
有些人用了"用户文件夹"装不同版本的配置.
他们都少想了一点,只要多想一点就发现不简单了.
我首先提问:
我要负责两间公司的制图,它们存在不一样的制图标准.
在同一个CAD同时打开两间公司的dwg,
你可以用文件路径等等信息区分两家公司,
然后ctk命令插入图框/qt画墙体,
要自动切换两家公司的标准,不能用手动切换,
因为可能造成忘记切换,乱序修改非常容易出错.
怎么实现这个需求?
(说不需要的只能说本领没学到家就在发表看法了)
如果实现这个需求是不是表示配置类实际上是动态的?
因为我还可以关闭dwg时候释放掉配置类资源.
实现起来其实非常简单.
有看过IFox事务栈的都知道:
trMap<Database, DBTrans>
桌子官方插件Civil也有类似的结构:
var civilDoc = CivilApplication.GetCivilDocument(db);
为什么我们都不约而同采取字典抽象一层缓存.
就是因为可以不同配置同时使用.
这个配置只需要:
configMap<user, config>
1,在cad文档打开事件,
读取路径的公司名作为文档的"用户名"配置,
有多个相同用户就计数+1,
并制作看门狗,计数不为0就定期续时间.
2,在cad文档关闭事件,
只需要把计数-1.
当计数为0的就表示看门狗不再续期,以实现惰性释放,
避免关闭了又开,造成频繁读取配置.
这样实现的话,就不会出现使用配置时候缺失"用户名",
否则用户就会感受到首次命令卡顿.
3,配置文件的json/xml/dwg被跨进程更改之后
还可以通过文件监控实现更新缓存.
完,xx |
|