flex 性能优化(2) : Dictionary class

本文介绍了AS3中的Dictionary类,对比了其与Object的区别,重点强调Dictionary可以使用非字符串作为键值对的键,并通过示例代码展示了如何使用Dictionary类。

 建议多用Dictionary , 最好是取代object (object 不会被编辑器检测) ,

下面是网上的关于Dictionary

AS3中的Dictionary类(flash.utils.Dictionary)是一个新的AS类。Dictionary类和Object唯一的区别在于:Dictionary对象可以使用非字符串作为键值对的键。例如:

var obj:Object = new Object();
obj["name"] = 1; // 键是字符串"name"
obj[1] = 2; // 键是1 (被转换成字符串"1")
obj[new Object()] = 3; // 键是new Object(),被转传成字符串"[object Object]"

for (var prop:String in obj) {
     trace(prop); // 输出:[object Object], 1, name
     trace(obj[prop]); // 输出:3, 2, 1
}

也就是说,无论用什么类型的变量作为键,都将被转换成字符串。同时,如果你使用了不同的对象作为键,都会北转换成字符串"[object Object]"作为键,因此而指向了同一个数据。例如:

ActionScript Code:   
var a:Object = new Object();   
var b:Object = new Object();   

var obj:Object = new Object();   
obj[a] = 1; // obj["[object Object]"] = 1;   
obj[b] = 2; // obj["[object Object]"] = 2;   

for (var prop:String in obj) {   
     trace(prop); // traces: [object Object]   
     trace(obj[prop]); // traces: 2   
}

Dictionary类将没有这个限制,你可以将键设置成任何一种数据类型。例如:

import flash.utils.Dictionary;

var a:Object = new Object();
var b:Object = new Object();

var dict:Dictionary = new Dictionary();
dict[a] = 1; // dict[a] = 1;
dict[b] = 2; // dict[b] = 2;

for (var prop:* in dict) {
     trace(prop); // traces: [object Object], [object Object]
     trace(dict[prop]); // traces: 1, 2
}

虽然在trace的时候,输出的还是[object Object],但是这个结果是对象的toString的结果。在Dictionary对象中,代表的是不同的对象引用。

在Directionary类的构造函数中传入true
var dict:Dictionary = new Dictionary(true); // use weak references as keys
var obj:Object = new Object();
dict[obj] = true;
delete obj;

虽然dict中有引用到obj,但并不是一个有效引用,所以obj仍然会被垃圾回收


这个是我现在的详情页面的代码 <template> <div> <dialog-edit :visible.sync="open" title="设备台账详情" @close="handleCancel" dialogType="dialog_detail" width="800px" height="600px" > <div slot="content" class="dialog_content"> <formlist :form="form" :form2="formData" :dictData="dictData" ref="formList" :readonly="true" :width="`120px`" ></formlist> <div slot="footer" class="dialog_footer"> <el-button @click="handleCancel">关 闭</el-button> </div> </div> </dialog-edit> </div> </template> <script> import { getDictionaries } from "@/utils"; export default { data() { return { form: [ { arr: [ { code: "equipmentCode", title: "设备编码", type: 0, readlyOnly: true, verification: true, rule: "0", customTips: " ", regular: " ", dictionary: "", multiple: false, fileNum: 0, single: true, dateType: "date", dateFormat: "yyyy-MM-dd", }, { code: "equipmentCategory", title: "设备大类", type: 1, readlyOnly: true, verification: true, rule: "0", customTips: " ", regular: " ", dictionary: "equipment_category", multiple: false, fileNum: 0, single: true, dateType: "date", dateFormat: "yyyy-MM-dd", }, { code: "equipmentSubcategory", title: "设备小类", type: 1, readlyOnly: true, verification: true, rule: "0", customTips: " ", regular: " ", dictionary: "equipment_subcategory", multiple: false, fileNum: 0, single: true, dateType: "date", dateFormat: "yyyy-MM-dd", }, { code: "modelDescription", title: "燃气表型号描述", type: 0, readlyOnly: true, verification: true, rule: "0", customTips: " ", regular: " ", dictionary: "", multiple: false, fileNum: 0, single: true, dateType: "date", dateFormat: "yyyy-MM-dd", }, { code: "specificationModel", title: "规格型号", type: 0, readlyOnly: true, verification: true, rule: "0", customTips: " ", regular: " ", dictionary: "", multiple: false, fileNum: 0, single: true, dateType: "date", dateFormat: "yyyy-MM-dd", }, { code: "accuracyLevel", title: "器具准确度等级", type: 1, readlyOnly: true, verification: true, rule: "0", customTips: " ", regular: " ", dictionary: "accuracy_level", multiple: false, fileNum: 0, single: true, dateType: "date", dateFormat: "yyyy-MM-dd", }, { code: "manufacturer", title: "器具生产单位", type: 0, readlyOnly: true, verification: true, rule: "0", customTips: " ", regular: " ", dictionary: "", multiple: false, fileNum: 0, single: true, dateType: "date", dateFormat: "yyyy-MM-dd", }, { code: "ownershipType", title: "归属类型", type: 1, readlyOnly: true, verification: true, rule: "0", customTips: " ", regular: " ", dictionary: "ownership_type", multiple: false, fileNum: 0, single: true, dateType: "date", dateFormat: "yyyy-MM-dd", }, { code: "equipmentOwner", title: "设备归属方", type: 0, readlyOnly: true, verification: true, rule: "0", customTips: " ", regular: " ", dictionary: "", multiple: false, fileNum: 0, single: true, dateType: "date", dateFormat: "yyyy-MM-dd", }, { code: "purchaseDate", title: "采购日期", type: 6, readlyOnly: true, verification: true, rule: "0", customTips: " ", regular: " ", dictionary: "", multiple: false, fileNum: 0, single: true, dateType: "date", dateFormat: "yyyy-MM-dd", }, { code: "storageLocation", title: "存放位置", type: 0, readlyOnly: true, verification: true, rule: "0", customTips: " ", regular: " ", dictionary: "", multiple: false, fileNum: 0, single: true, dateType: "date", dateFormat: "yyyy-MM-dd", }, { code: "overdueYears", title: "超期年限()", type: 0, readlyOnly: true, verification: true, rule: "0", customTips: " ", regular: " ", dictionary: "", multiple: false, fileNum: 0, single: true, dateType: "date", dateFormat: "yyyy-MM-dd", }, { code: "lastVerificationDate", title: "最后检定日期", type: 6, readlyOnly: true, verification: true, rule: "0", customTips: " ", regular: " ", dictionary: "", multiple: false, fileNum: 0, single: true, dateType: "date", dateFormat: "yyyy-MM-dd", }, { code: "equipmentStatus", title: "设备状态", type: 1, readlyOnly: true, verification: true, rule: "0", customTips: " ", regular: " ", dictionary: "equipment_status", multiple: false, fileNum: 0, single: true, dateType: "date", dateFormat: "yyyy-MM-dd", }, { code: "storageStatus", title: "仓储状态", type: 1, readlyOnly: true, verification: true, rule: "0", customTips: " ", regular: " ", dictionary: "storage_status", multiple: false, fileNum: 0, single: true, dateType: "date", dateFormat: "yyyy-MM-dd", }, { code: "inspectionStatus", title: "检测状态", type: 1, readlyOnly: true, verification: true, rule: "0", customTips: " ", regular: " ", dictionary: "inspection_status", multiple: false, fileNum: 0, single: true, dateType: "date", dateFormat: "yyyy-MM-dd", }, { code: "equipmentPhoto", title: "设备照片路径", type: 30, readlyOnly: true, verification: true, rule: "0", customTips: " ", regular: " ", dictionary: "", multiple: false, fileNum: 0, single: true, dateType: "date", dateFormat: "yyyy-MM-dd", }, { code: "remarks", title: "备注", type: 0, readlyOnly: true, verification: true, rule: "0", customTips: " ", regular: " ", dictionary: "", multiple: false, fileNum: 0, single: true, dateType: "date", dateFormat: "yyyy-MM-dd", }, ], }, ], formData: {}, open: false, dictData: {}, }; }, methods: { async init(row) { await this.loadDictData(); this.open = true; this.formData = JSON.parse(JSON.stringify(row)); // 格式化日期字段 if (this.formData.purchaseDate) { this.formData.purchaseDate = this.formatDate(this.formData.purchaseDate); } if (this.formData.lastVerificationDate) { this.formData.lastVerificationDate = this.formatDate( this.formData.lastVerificationDate ); } }, async loadDictData() { const arr = [ "equipment_category", "equipment_subcategory", "accuracy_level", "ownership_type", "equipment_status", "storage_status", "inspection_status", ]; const data = await getDictionaries(arr); this.dictData = { equipment_category: data["equipment_category"] || [], equipment_subcategory: data["equipment_subcategory"] || [], accuracy_level: data["accuracy_level"] || [], ownership_type: data["ownership_type"] || [], equipment_status: data["equipment_status"] || [], storage_status: data["storage_status"] || [], inspection_status: data["inspection_status"] || [], }; }, formatDate(dateString) { if (!dateString) return null; return new Date(dateString).toISOString().split("T")[0]; }, handleCancel() { this.open = false; } } }; </script>
06-12
内容概要:本文介绍了一个基于多传感器融合的定位系统设计方案,采用GPS、里程计和电子罗盘作为定位传感器,利用扩展卡尔曼滤波(EKF)算法对多源传感器数据进行融合处理,最终输出目标的滤波后位置信息,并提供了完整的Matlab代码实现。该方法有效提升了定位精度与稳定性,尤其适用于存在单一传感器误差或信号丢失的复杂环境,如自动驾驶、移动采用GPS、里程计和电子罗盘作为定位传感器,EKF作为多传感器的融合算法,最终输出目标的滤波位置(Matlab代码实现)机器人导航等领域。文中详细阐述了各传感器的数据建模方式、状态转移与观测方程构建,以及EKF算法的具体实现步骤,具有较强的工程实践价值。; 适合人群:具备一定Matlab编程基础,熟悉传感器原理和滤波算法的高校研究生、科研人员及从事自动驾驶、机器人导航等相关领域的工程技术人员。; 使用场景及目标:①学习和掌握多传感器融合的基本理论与实现方法;②应用于移动机器人、无人车、无人机等系统的高精度定位与导航开发;③作为EKF算法在实际工程中应用的教学案例或项目参考; 阅读建议:建议读者结合Matlab代码逐行理解算法实现过程,重点关注状态预测与观测更新模块的设计逻辑,可尝试引入真实传感器数据或仿真噪声环境以验证算法鲁棒性,并进一步拓展至UKF、PF等更高级滤波算法的研究与对比。
内容概要:文章围绕智能汽车新一代传感器的发展趋势,重点阐述了BEV(鸟瞰图视角)端到端感知融合架构如何成为智能驾驶感知系统的新范式。传统后融合与前融合方案因信息丢失或算力需求过高难以满足高阶智驾需求,而基于Transformer的BEV融合方案通过统一坐标系下的多源传感器特征融合,在保证感知精度的同时兼顾算力可行性,显著提升复杂场景下的鲁棒性与系统可靠性。此外,文章指出BEV模型落地面临大算力依赖与高数据成本的挑战,提出“数据采集-模型训练-算法迭代-数据反哺”的高效数据闭环体系,通过自动化标注与长尾数据反馈实现算法持续进化,降低对人工标注的依赖,提升数据利用效率。典型企业案例进一步验证了该路径的技术可行性与经济价值。; 适合人群:从事汽车电子、智能驾驶感知算法研发的工程师,以及关注自动驾驶技术趋势的产品经理和技术管理者;具备一定自动驾驶基础知识,希望深入了解BEV架构与数据闭环机制的专业人士。; 使用场景及目标:①理解BEV+Transformer为何成为当前感知融合的主流技术路线;②掌握数据闭环在BEV模型迭代中的关键作用及其工程实现逻辑;③为智能驾驶系统架构设计、传感器选型与算法优化提供决策参考; 阅读建议:本文侧重技术趋势分析与系统级思考,建议结合实际项目背景阅读,重点关注BEV融合逻辑与数据闭环构建方法,并可延伸研究相关企业在舱泊一体等场景的应用实践。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值