1 u4 B4 O3 W" V! q) y B& `6 R; S 随着Flex越来越多的被人们所熟知,越来越多的互联网也开始了RIA应用。众所周知,目前国内的宽带应用并不是像很多发达国家发达,个人应用带宽基本上都是2M以下的,怎么样能够使你的Flex应用能够流畅的运行在客户端的问题,成为了制约每个Flex应用开发程序员的大难题。 * ~( N X* Z. p7 r8 E. j2 ]2 U. x 在这里,我收集整理了一下网络上关于这方面经验,欢迎大家补充。 " Y+ N! _* o! \8 ?$ k. W* Z 基本原则:8 \ C) v0 d, z. P 1. 从外部加载媒体(Media)! `, y; @3 C- ? Heider提到了一个常用的Flex最佳实践——限制嵌入到应用/SWF文件中的媒体的数量,如图像、影片及mp3等资源都可以从外部的SWF文件加载。 5 E) f2 W/ K- U( |' J9 V Flex框架可以直接将图片、mp3及字体等资源编译到SWF中。当你想让最终用户获得全部资源时,这种方式确实能派上用场,但是这会导致你的应用长时间停留在“Loading”阶段。 3 b% P1 V3 ^1 j- Q: ~% c1 w |9 w 2. 在嵌入式字体中限制字符集: a6 T3 m; `, n2 s Heider建议在嵌入式字体中限制字符集以降低SWF文件的总下载时间: - G+ } G# g* T% ^1 T 当你在Flex中嵌入一种字体时,你就会获得该字体的全部字符的支持。尽管这可能是你想要的,但你确信你需要全部字符么?例如,在一个只面向英文的应用中,你确信你真的想花时间下载中文字符数据么?% [4 w/ P C6 h( u 3. 缓存框架 Heider回顾了Flex 3 support for runtime-shared-libraries (RSL)这篇文章: % M) Z# c- k, F 从Flex 3开始,你可以将Adobe签名的框架——RSLs缓存到Flash Player的cache中。这有两个好处。首先,缓存在Flash Playercache中的签名的框架RSLs可由所有配置好的Flex应用共享。换句话说,如果某人的应用已经下载了500k的签名的框架RSL,并且该RSL仍旧在Flash Player cache中,那么你的应用就可以使用缓存下来的RSL。其次,即使某人清空了其浏览器缓存,对Flash Playercache也没有任何影响。% q0 h( S" K/ ^ z; N% Z) ] 4. 考虑模块化 : l6 v* B" R: B Heider谈到了将Flex应用划分成模块的好处:减少字体加载时间的另一种方式就是将你的Flex应用划分成模块。使用模块的一个好处在于当加载和卸载模块时你能完全操控它。* z( A0 e7 j- e2 x* P' d9 [+ t 之所以要划分成模块的最后一个原因是他们更快,而且我能即时加载它们。换句话说,在启动时唯一需要加载的模块就是 Step1.swf模块。因此,在使用模块的情况下,最终用户节省了启动时间,但是当他从一个模块切换到另一个模块时却需要花更多时间,因为每个模块都需 要以JIT形式加载。在我的应用中,只有当用户首次在steps 1-5之间切换时需要花更多时间。 5. 推迟实例化 Heider围绕着Flex组件的“creationPolicy”属性及何时实例化应用的不同部分给出了很多建议。4 @$ {( u$ {" X! Z+ N' ^' H 如果你想减少从数据下载到用户真正可以使用的总时间,当务之急就是推迟实例化。这项技术背后的理念就是直到应用真正使用的时候才在内存中创建对象。) S0 v5 `7 a* {7 r+ m, i 尽管推迟实例化技术会在应用的整个使用过程中导致少许——通常不那么明显——的延迟,但与长时间的启动延迟相比,它还是可接受的。推迟实例化的另一个好处在于内存使用的优化。# t( v1 Q R7 Y8 I- ]
以上原则来自Jun Heider在O’Reilly的InsideRIA站点上发表了一篇精彩的文章,该文章就链接标记如何加快Flex应用的启动速度提出了很多建议,以帮助用户减少看见讨厌的“Loading”对话框的出现时间。他深入探讨了问题的不同方面,并对每种技术的优势和劣势进行了评判。Heider还谈到了一个“实验性”的条款——“使用流”,这是他在讨论Dirk Eismann的帖子(Building monolithicFlex SWFs that still startup quickly.”)时谈及的。Eismann提出一项技术以利用FlashPlayer中的多个frames以在部分应用中达到流的目的。查看所有的帖子以更多地了解该技术及关于加快Flex启动速度的建议。; J. \- S( x P( f3 B0 Y* D1 T) `
内存释放优化原则! h7 Q" C% g' S, E# w( d 1. 被删除对象在外部的所有引用一定要被删除干净才能被系统当成垃圾回收处理掉; 2. 父对象内部的子对象被外部其他对象引用了,会导致此子对象不会被删除,子对象不会被删除又会导致了父对象不会被删除; 3. 如果一个对象中引用了外部对象,当自己被删除或者不需要使用此引用对象时,一定要记得把此对象的引用设置为null; 4. 本对象删除不了的原因不一定是自己被引用了,也有可能是自己的孩子被外部引用了,孩子删不掉导致父亲也删不掉; 5. 除了引用需要删除外,系统组件或者全局工具、管理类如果提供了卸载方法的就一定要调用删除内部对象,否则有可能会造成内存泄露和性能损失;$ P. N5 A |( h- @ 6. 父对象立刻被删除了不代表子对象就会被删除或立刻被删除,可能会在后期被系统自动删除或第二次移除操作时被删除;8 j7 O% D9 S h6 g; v5 p 7. 如果父对象remove了子对象后没有清除对子对象的引用,子对象一样是不能被删除的,父对象也不能被删除; 8. 注册的事件如果没有被移除不影响自定义的强行回收机制,但有可能会影响正常的回收机制,所以最好是做到注册的事件监听器都要记得移除干净。6 T7 F; V4 e P 9. 父对象被删除了不代表其余子对象都删除了,找到一种状态的泄露代码不等于其他状态就没有泄露了,要各模块各状态逐个进行测试分析,直到测试任何状态下都能删除整个对象为止。/ ?; c' [- H, L9 ]: Q i* Z 内存泄露举例:) ^: d) b7 h I" b 1. 引用泄露:对子对象的引用,外部对本对象或子对象的引用都需要置null;6 x; Z. a% ~8 m 2.系统类泄露:使用了系统类而忘记做删除操作了,如BindingUtils.bindSetter(),ChangeWatcher.watch()函数时候完毕后需要调用ChangeWatcher.unwatch()函数来清除引用 ,否则使用此函数的对象将不会被删除; 类似的还有MUSIC,VIDEO,IMAGE,TIMER,EVENT,BINDING等。- W5 T, z( u# m7 [/ w0 Z* T5 C 3. 效果泄露:当对组件应用效果Effect的时候,当本对象本删除时需要把本对象和子对象上的Effect动画停止掉,然后把Effect的target对象置null; 如果不停止掉动画直接把 Effect置null将不能正常移除对象。 4. SWF泄露:要完全删除一个SWF要调用它的unload()方法并且把对象置null; 5. 图片泄露:当Image对象使用完毕后要把source置null;(为测试); 6. 声音、视频泄露: 当不需要一个音乐或视频是需要停止音乐,删除对象,引用置null; 内存泄露解决方法:, Y2 n2 p, _2 M# U! O 1. 在组件的REMOVED_FROM_STAGE事件回掉中做垃圾处理操作(移除所有对外引用(不管是VO还是组件的都需要删除),删除监听器,调用系统类的清除方法)" _: ~, n: ]+ A. O; h 先remove再置null, 确保被remove或者removeAll后的对象在外部的引用全部释放干净; 2. 利用Flex的性能优化工具Profile来对项目进程进行监控,可知道历史创建过哪些对象,目前有哪些对象没有被删除,创建的数量,占用的内存比例和用量,创建过程等信息;' w( B+ D5 u$ M1 D+ _ 总结:关键还是要做好清除工作,自己设置的引用自己要记得删除,自己用过的系统类要记得做好回收处理工作。 以上问题解决的好的话不需要自定义强制回收器也有可能被系统正常的自动回收掉。 |
分享到:
相关推荐
总之,Flex性能优化是一个综合性问题,需要从多个维度进行考虑。上述提到的从外部加载媒体资源、限制嵌入式字体的字符集、框架缓存、模块化设计、推迟实例化以及内存释放优化等都是实践中行之有效的优化策略。开发者...
Flex性能优化常用手法总结可能包括以下几个方面: 1. **减少重绘和重排**:尽量避免不必要的组件更新,因为这会导致整个UI的重绘和重排,消耗性能。 2. **优化数据绑定**:避免使用实时数据绑定,考虑使用变更侦听...
基于TypeScript+three.js 实现的三维地质模型剖切,以及剖面的补充+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 基于TypeScript+three.js 实现的三维地质模型剖切,以及剖面的补充+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档~ 基于TypeScript+three.js 实现的三维地质模型剖切,以及剖面的补充+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 基于TypeScript+three.js 实现的三维地质模型剖切,以及剖面的补充+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 基于TypeScript+three.js 实现的三维地质模型剖切,以及剖面的补充+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档
内容概要:本文详细介绍了利用虚拟惯性控制技术,使双馈风机参与到三机九节点电力系统的一次调频过程中。首先,文章阐述了双馈风机的基本特性和虚拟惯性控制的工作原理,即通过调节转速响应模块,在电网频率波动时快速提供有功功率支持。接着,构建了一个包含两个双馈风机、一个常规发电机及相关无功源的三机九节点系统模型,并详细描述了各组件之间的连接方式及其参数配置。随后,展示了具体的Matlab/Simulink模型搭建步骤,包括系统结构、模块连接、参数设定等方面的内容。通过仿真实验,验证了所提出的虚拟惯性控制方法在电网频率波动情况下的有效性,结果显示该方法能够在频率波动范围内提供有效的有功功率调节,显著提高了系统的调频效率。 适合人群:对电力系统调频技术和双馈风机控制感兴趣的科研人员、工程师和技术爱好者。 使用场景及目标:适用于希望深入了解双馈风机在电力系统中发挥调频作用的研究者,旨在探索如何通过改进控制策略提升电力系统的稳定性和可靠性。 其他说明:文中提供了详细的仿真代码片段和关键算法解析,有助于读者更好地理解和复现研究成果。同时,强调了参数调整的重要性,并给出了优化建议。
内容概要:本文详细介绍了下垂控制的两电平三相桥式逆变器的工作原理、控制策略及MATLAB仿真实现。首先解释了逆变器能够根据负载变化自动调整输出电压的频率和幅值,确保输出稳定。文中重点讨论了ABC到dq坐标系的解耦变换方法,以及电压电流双闭环控制的具体实现步骤。此外,还深入探讨了下垂控制的作用及其核心方程,展示了如何通过MATLAB进行仿真测试,验证控制策略的有效性。 适合人群:从事电力电子、自动化控制领域的研究人员和技术人员,尤其是对逆变器控制策略感兴趣的读者。 使用场景及目标:适用于研究和开发微电网和分布式电源系统中的逆变器控制策略。主要目标是帮助读者理解下垂控制的工作机制,掌握电压电流双闭环控制的设计方法,并能够在MATLAB环境中进行相关仿真。 其他说明:文中提供的MATLAB代码和仿真模型可以作为实际项目的参考,有助于提高逆变器系统的稳定性和响应速度。同时,文中提到的调试经验和常见问题也为实际应用提供了宝贵的指导。
内容概要:本文详细介绍了直驱式永磁风电并网控制系统在Simulink中的建模与实现,尤其是最大功率追踪(MPPT)控制。首先,文章讲解了风机建模的基本原理,包括风力机特性方程及其关键参数如空气密度、扫掠面积、风速和风能利用系数等。接着,讨论了最大功率追踪控制的方法,特别是爬山法的具体实现步骤。最后,文章展示了如何将这两部分内容整合成完整的最大功率追踪运行程序,并提到了一些实用技巧,如永磁同步电机参数设置、锁相环设计、仿真步长选择等。 适合人群:从事风力发电系统设计与仿真的工程师和技术人员,以及对新能源技术和电力电子感兴趣的科研人员。 使用场景及目标:适用于希望深入了解直驱式永磁风电并网控制原理的研究者,或者正在参与相关项目开发的技术团队。主要目标是帮助读者掌握基于Simulink的最大功率追踪控制方法,提高风力发电系统的效率和可靠性。 其他说明:文中提供了大量具体的Matlab/Simulink代码片段和配置建议,便于读者快速上手实践。同时强调了理论与实际相结合的重要性,鼓励读者根据实际情况调整模型参数,确保仿真结果贴近现实工况。
内容概要:本文详细介绍了基于Matlab/Simulink平台构建的DSTATCOM无功补偿风电并网模型。该模型包括两种不同类型的风力发电机(双馈风机DFIG和感应风机),并通过DSTATCOM装置对风电并网过程中可能出现的电压波动进行有效补偿。文中通过具体的仿真案例展示了在风速突变情况下,DSTATCOM如何迅速响应并稳定电压,确保电力系统的可靠运行。此外,文章还探讨了DSTATCOM在低电压穿越方面的应用及其控制策略。 适合人群:从事风电并网研究的技术人员、电力系统工程师以及相关领域的研究人员。 使用场景及目标:适用于希望深入了解风电并网技术细节的研究者和技术开发者,旨在帮助他们掌握DSTATCOM的工作原理及其在实际工程中的应用方法。 其他说明:文章提供了详细的仿真代码示例和参数调整技巧,有助于读者更好地理解和实践DSTATCOM在风电并网中的重要作用。
文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 Rust 以内存安全、零成本抽象和并发高效的特性,重塑编程体验。无需垃圾回收,却能通过所有权与借用检查机制杜绝空指针、数据竞争等隐患。从底层系统开发到 Web 服务构建,从物联网设备到高性能区块链,它凭借出色的性能和可靠性,成为开发者的全能利器。拥抱 Rust,解锁高效、安全编程新境界!
文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 编译闪电般迅速,并发性能卓越,部署轻松简单!Go 语言以极简设计理念和出色工程性能,成为云原生时代的首选编程语言。从 Docker 到 Kubernetes,全球顶尖科技企业都在采用 Go。点击了解 Go 语言的核心优势、实战窍门和未来走向,开启高效编程的全新体验!
本电路默认最大功率追踪电压为18V。 太阳能板最大功率点电压VMPPT=1.205×(1+(Rmh1+Rmh2)/Rml)。 充电电压不能大于25V,最大充电电流小于等于4A
一类四正则小世界网络的生成树数目的算法.pdf
内容概要:本文详细介绍了基于Matlab 2021a的异步电机矢量控制系统中电流滞环控制的实现过程。首先,文章解释了电流环的整体结构,包括定子电流的坐标变换、转矩分量和励磁分量的分离以及旋转变压器模块的应用。接着,展示了电流滞环控制的核心代码,强调了带积分修正的滞环控制机制,并讨论了SVPWM模块的实现技巧。此外,文章探讨了速度环PI参数的自整定设计、谐波分析、磁链观测器的改进方案以及仿真加速技巧。最后,分享了一些实用的调试经验和仿真优化方法,如参数自适应调整、变步长求解器的选择和数据存储格式的优化。 适合人群:从事电机控制领域的研究人员和技术人员,尤其是对异步电机矢量控制和电流滞环控制感兴趣的读者。 使用场景及目标:适用于希望深入了解异步电机矢量控制系统中电流滞环控制实现细节的研究人员和技术人员。目标是帮助读者掌握电流滞环控制的关键技术和调试技巧,提高仿真实践能力。 其他说明:文中提供了丰富的代码片段和调试经验,有助于读者更好地理解和应用所介绍的技术。同时,报告中还包括详细的故障分析和解决方案,确保读者能够避免常见陷阱并顺利进行仿真。
内容概要:本文详细探讨了储能系统中双向DC/DC变换器并联运行时的下垂控制技术及其电流分配优化方法。首先介绍了下垂控制的基本概念,即通过虚拟电阻实现电流按比例分配,避免个别模块过载或欠载。接着讨论了电压补偿机制,防止负载变化引起母线电压大幅波动。文中提供了具体的Python代码示例,展示了如何模拟和实现下垂控制以及电压补偿。此外,还涉及了参数整定技巧,如虚拟电阻的选择、下垂系数的调整,并提出了动态虚拟阻抗的概念。最后,强调了实际调试过程中需要注意的问题,如线路阻抗的影响、低频振荡的抑制等。 适合人群:从事电力电子、储能系统设计与维护的技术人员,对下垂控制感兴趣的科研人员。 使用场景及目标:适用于储能系统的设计与优化,特别是多个双向DC/DC变换器并联运行的场合。主要目标是提高系统的稳定性和效率,确保电流均匀分配,同时保持良好的电压质量。 其他说明:文中提供的代码片段和调试经验有助于理解和实施下垂控制技术,对于实际工程项目具有较高的参考价值。
文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 Rust 以内存安全、零成本抽象和并发高效的特性,重塑编程体验。无需垃圾回收,却能通过所有权与借用检查机制杜绝空指针、数据竞争等隐患。从底层系统开发到 Web 服务构建,从物联网设备到高性能区块链,它凭借出色的性能和可靠性,成为开发者的全能利器。拥抱 Rust,解锁高效、安全编程新境界!
内容概要:本文详细介绍了威纶通触摸屏与施耐德ATV12变频器之间的Modbus通讯方法,涵盖硬件接线、参数设置、控制程序编写以及调试技巧。首先,文章讲解了正确的硬件连接方式,强调了接线规范和注意事项,如使用带屏蔽的双绞线并确保正确接地。接着,针对ATV12变频器的具体参数设置进行了详尽说明,包括通信模式的选择、波特率、校验位等重要参数的配置。随后,文章展示了如何在威纶通触摸屏上创建Modbus RTU设备,并提供了具体的配置参数和控制命令示例。此外,文中还分享了一些常见的调试问题及其解决办法,如通讯超时、频率设定异常等。最后,给出了实用的调试建议,如使用串口助手抓包分析和加入通讯心跳检测等功能。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是那些负责PLC编程、HMI界面开发以及设备集成工作的专业人员。 使用场景及目标:适用于需要将威纶通触摸屏与施耐德ATV12变频器进行Modbus通讯连接的实际工程项目中,帮助技术人员顺利完成设备间的通讯配置,确保系统稳定可靠运行。 其他说明:本文不仅提供了详细的理论指导,还结合了丰富的实践经验,能够有效地提高读者在实际工作中解决问题的能力。同时提醒读者,在进行相关操作前务必仔细阅读官方文档,避免因误操作造成不必要的损失。
内容概要:本文详细记录了BLDC(无刷直流电机)在空载和带载条件下的转速阶跃响应及抗负载扰动的实验过程和结果。通过对不同条件下电机转速的变化进行模拟和实际测量,探讨了电机在不同工况下的表现及其背后的控制机制。文中不仅提供了具体的Python和C代码片段用于解释控制逻辑,还讨论了PID控制器的参数调整方法及其对电机性能的影响。此外,作者还分享了一些实验中遇到的问题及解决方案,如霍尔信号处理、PWM占空比控制、电流环检测等。 适合人群:从事电机控制研究的技术人员、电子工程专业的学生、对BLDC电机有兴趣的研究爱好者。 使用场景及目标:①理解BLDC电机在不同负载条件下的动态特性;②掌握PID控制器参数调整技巧;③学习如何处理电机控制中的常见问题,如霍尔信号处理、PWM控制等。 其他说明:文章通过生动的比喻和详细的代码解析,使复杂的电机控制概念变得易于理解。同时,作者分享了许多实践经验,有助于读者更好地理解和应用相关知识。
文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 编译闪电般迅速,并发性能卓越,部署轻松简单!Go 语言以极简设计理念和出色工程性能,成为云原生时代的首选编程语言。从 Docker 到 Kubernetes,全球顶尖科技企业都在采用 Go。点击了解 Go 语言的核心优势、实战窍门和未来走向,开启高效编程的全新体验!
文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 编译闪电般迅速,并发性能卓越,部署轻松简单!Go 语言以极简设计理念和出色工程性能,成为云原生时代的首选编程语言。从 Docker 到 Kubernetes,全球顶尖科技企业都在采用 Go。点击了解 Go 语言的核心优势、实战窍门和未来走向,开启高效编程的全新体验!
文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 Rust 以内存安全、零成本抽象和并发高效的特性,重塑编程体验。无需垃圾回收,却能通过所有权与借用检查机制杜绝空指针、数据竞争等隐患。从底层系统开发到 Web 服务构建,从物联网设备到高性能区块链,它凭借出色的性能和可靠性,成为开发者的全能利器。拥抱 Rust,解锁高效、安全编程新境界!
互联网大厂裁员背后的经济规律与增长天花板.mp4