`
mmdev
  • 浏览: 12915869 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

提高精简框架集程序的性能

 
阅读更多

以下编程做法可以节省内存和改善设备应用程序的性能。

使用 Windows 窗体和图形节省内存

· 对提供 BeginUpdate EndUpdate 方法的控件使用这两种方法,提供这两种方法的控件包括 ComboBoxListBoxListViewToolStripComboBox TreeView

· 重新定位控件时,使用 SuspendLayout ResumeLayout 方法。

· 在后台加载其他窗体,使用数据来填充控件,然后再使用 Show 方法。

· 将事件处理代码限制为仅执行重要任务,以便挂起过程可以继续。

· 使用脱屏位图。有关示例,请参见如何:绘制后台图像

· 重写控件上的 OnKeyDownOnKeyPress OnKeyUp 方法,而不是添加按键事件处理程序。

使用数据和字符串节省内存

· for 循环中使用整数变量(Int32 Int64),而不使用对象变量。

· 避免使用枚举的 ToString 方法,因为它会搜索元数据表,从而影响性能。

· 避免 OutOfMemoryException 错误。如果没有足够的内存分配给内部使用或分配给新对象实例,公共语言运行库可能会引发此异常。要避免此异常,应避免编写占用 64K 或更多内存的大方法。

· 移除 System.SR.dll,它包含异常对话框的错误信息字符串。部署应用程序时可以不使用此文件,从而节省内存。如果存在 System.SR.dll,则 .NET Compact Framework 将动态加载 System.SR.dll 中包含的错误字符串。

如果设备中不存在此 .dll 文件,则所有异常都包含消息“无法加载资源程序集”。不过,在开发期间将 System.SR.dll 引用添加到 Microsoft Visual Studio 2005 项目中总是有用的,因为这样您将看到有意义的异常。

· 字符串是不可变的,因此,每次修改该字符串时都会创建新的 String 对象。构造需经常修改的字符串时,请考虑使用 StringBuilder

· 如果您知道用于 DateTime 序列化的确切格式,请为 DateTime 使用 ParseExact 方法。否则,DateTime分析器将按顺序尝试应用多个特定于区域性的格式。

· 限制打开 SqlCeCommand 对象的数量,并在完成后释放它们。

与本机代码进行交互时节省内存

· 在平台调用操作中,使用可直接复制到本机结构中的类型,这样的类型在托管和非托管内存中有一种通用表示形式,如 Int32 IntPtr。对于大于 32 位的可直接复制到本机结构中的值类型来说,通过引用传递比通过值传递更快。有关可直接复制到本机结构中的类型的更多信息,请参见 .NET Compact Framework 中可直接复制到本机结构中的类型

· 为函数签名中的参数使用 InAttribute OutAttribute 属性可以减少不必要的封送处理。

· 使用 Marshal 类中的方法手动在 IntPtr 和托管对象之间转换,如 PtrToStructurePtrToStringBSTRGetObjectForNativeVariant GetObjectForIUnknown

· 使用 Prelink PrelinkAll 方法来引发支持本机到托管调用的存根 (stub) JIT 编译。

· 如果期望您的本机 COM 对象通常情况下返回 S_FALSE,或其他非 S_OK HRESULT 值,则应将 PreserveSig 字段设置为 true,并使托管签名与本机签名匹配。这就避免了运行库将 HRESULT 值转换为 COM 调用上的异常时必需的 try/catch 块的系统开销。

· 尽量使用一个平台调用多做工作,尽量少用多个调用。

在集合中节省内存

· 如果集合基于数组,请使用索引器。

· 一旦有机会,就指定集合的大小,因为动态调整大小可以大大增加额外的存储。

· 使用泛型集合以避免值类型的装箱和取消装箱产生的系统开销。定义您自己的优化集合可实现最佳性能。

在 XML 中节省内存

· 使用 XmlTextReader XmlTextWriter 代替 XmlDocument(因为它占用的内存较多)。

· 指定 XmlReaderSettings XmlWriterSettings 的设置以改善性能。如果 IgnoreWhitespace IgnoreComments 两个属性值适用,它们可以显著改善性能。

· 使用 UTF-8ASCII UTF-16 字符编码,它们比 ANSI Windows 代码页编码更快。

· 避免使用用于分析的架构,因为这种架构需要更多的验证工作。

· 当从 XML 源填充 DataSet 窗体时,应将列映射为属性并使用类型化 DataSet

· 填充 DataSet 时,应避免填充以下各项:

o 架构推理。

o 嵌套表。

o 多个 DateTime 列。为了获得更好的性能,请使用 Ticks 属性值。

· 使用 XML 反序列化时,遵循以下准则可改善性能:

o 使元素和属性名尽量保持简短,因为每个字符都必须经过验证。

o 基于属性数据的 XML 比基于元素数据的 XML 要快。

o 如果适用,使用 System.Xml.XmlNodeReader.Skip 方法。

o 如果性能很重要,应考虑二进制序列化。

· XML 序列化的每一种类型分别使用一个 XmlSerializer 实例,以减少用于搜索元数据的时间。

· 由于序列化大量 XML 可能会耗尽内存,应考虑通过使用 BinaryReader BinaryWriter 生成自定义二进制序列化机制。

使用 Web 服务时节省内存

· 读取和编写 DataSet 时,应使用 DiffGram。有关更多信息,请参见 DiffGram

· XML 格式将远程 DataSet 及其架构保存到设备。

· 初始屏幕期间创建一个简单的 Web 服务方法调用,因为第一个调用比后面的调用要慢。

· 小心处理网络和数据错误。

· 某些情况下,可以手动将 DataSet 序列化为 XML 字符串,然后执行一个 Web 服务调用,这样可以提高性能。

在高级编程中节省内存

· 异步处理大操作。

· 避免虚拟调用。.NET Compact Framework 运行库虚拟调用比静态调用或实例调用大约慢 30%。由于资源受约束,.NET Compact Framework 不使用 vtable,因此必须通过转换类和接口层次结构来调用方法,但这是一种代价很高的操作。.NET Compact Framework 维护已解析的虚拟调用的缓存,因此在大多数情况下,无须重新解释调用。

· 尽可能使用字段而不使用属性。

· 定义值类型时,重写 GetHashCode Equals 方法。如果未重写它们,则运行库会在基 ValueType 类中使用这些方法的普通版本。

· 谨慎使用映射。出于调研目的将映射与非实例化类一起使用会影响应用程序中的实例化对象的性能。

· 确保 RESX 文件中的托管资源具有完全限定名,并且这些资源准确无误。它们必须具有正确的版本和 PublicKeyToken 字段。为未正确指定的类型查找最合适的替代类型会影响性能。

· 请注意,在某些情况下,直接从文件读取应用程序数据就足够了,这比使用 ResourceManager 效率更高。ResourceManager 可以在定位您的二进制资源之前在文件系统中探测多个位置来查找最匹配的附属程序集。为作业使用适当的工具。

分享到:
评论

相关推荐

    JAVA开源量化交易程序开发框架源代码

    (同时测试对比了RFC 7396,性能不佳) 数据同步利用RFC 6902进行差异化操作,移除复杂的RPC over HTTP/WebSocket。 停止对Python客户端的支持。如有需求仍然可以自行开发。(Python重构测试坑太多) 移除行情记录...

    适用于Python开发人员的精简,简约的Web服务和应用程序后端框架,重点关注大规模的可靠性和性能。-Python开发

    Falcon Web框架Falcon是一个可靠的高性能Python Web框架,用于构建大型应用程序后端和微服务。 Falcon Web框架Falcon是一种可靠的高性能Python Web框架,用于构建大型应用程序后端和微服务。 它鼓励REST架构风格,并...

    weweb:兼容小程序写法的web开发框架

    实现了小程序运行在web端的服务和视图引擎,以便使weweb能适应web端的性能要求,相较小的程序原生框架,主要有以下调整:框架核心库进行压缩精减,剔除web不相关的部分,使核心库体积大大移位将内部的三层架构精简为...

    coco:Compact Components是用于开发资源密集型应用程序的框架,重点是混合现实应用程序和机器人技术。 该存储库提供了CoCo Mixed Reality所基于的核心技术

    一个用于高性能多线程共享内存应用程序的C ++框架。 将应用程序拆分为可以相互并行运行或彼此封装的组件。 组件可以定期运行,也可以由事件触发。 CoCo还提供了一个端口系统,使组件能够以非常低的开销进行通信,而...

    Expess入门-介绍

    Expess入门___介绍 基于 Node.js 平台,快速、开放、极简的 Web 开发框架 ...Express 提供精简的基本 Web 应用程序功能,而不会隐藏您了解和青睐的 Node.js 功能。 框架 许多 流行的开发框架 都基于 Express 构建。

    gfirefly firefly-gevent是firefly的gevent版本基于coroutine的python网络开发框架

    相比现在的firefly版本使用的twisted,gevent更加的精简。 gevent就是一个基于coroutine的python网络开发框架。协程是一种并发模型,但不同于thread和callback,它的所有task都是可以在一个线程里面执行,然后可以...

    CVASP框架 201204C.zip

    原创ASP框架:CVASP框架 201204C 发布!ASP依然可以那么优雅!   基本信息: 版本编号:201204C 核心字节:51700 核心文件:cvcorem.asp 英文名称:CVASP -- Controller View for ASP Framework 中文名称:...

    herosphp-master.zip

    herosphp 框架内核代码, 一个优秀的轻量级 php 开源框架。框架的原理简单易懂,使用和学习的成本低,想要二开也非常容易上手。...代码风格简洁漂亮,程序精简(内核代码不到 200K),注释详细,适合新手研究学习。

    论文研究-并行子树约简方法在软件故障定位中的运用.pdf

    该方法采用设计简单而且对并行计算性能的获取卓有成效的Fork/Join并行计算框架,运用反复递归和划分子任务的方式将目标问题划分成足够精简的子任务,实现了对程序调用图的高效约简。实验结果表明,并行子树约简方法...

    litespeed.js:精简且快速的微型javascript框架,易于学习**

    Litespeed.js很好地利用了浏览器的内存管理,垃圾收集和渲染功能,以最大化您的Web应用程序性能。 从0.2。*版本开始,litespeed.js的权重仅为4.9kb(压缩和压缩)主要特点零依赖4.9kb(压缩后压缩) 无需工具爱与...

    springboot210基于Springboot开发的精简博客系统的设计与实现_仅论文+说明文档.zip

    标题:基于Spring Boot和Vue.js的Web应用程序开发框架论文文档 摘要:本论文介绍了一种基于Spring Boot和Vue.js的Web应用程序开发框架,旨在提供一个通用的管理系统模板。通过系统的需求分析、概要设计、详细设计和...

    HerosPHP(PHP MVC开发框架) v3.0.1.zip

    4、代码风格简洁漂亮,程序精简高效,但是注释详细,适合新手学习. HerosPHP功能 完整的MVC支持 强大的数据库操作功能 完善的AOP支持,可以在应用和模块分别设置监听器,轻松完成切面编程 提供的大量的字符串...

    banana-chocolate-chip:由gulp支持的基于松饼的现代Web应用程序的前端框架

    精简所有内容,以帮助提高网站性能。 2.图像压缩 使用gulp-imagemin压缩PNG,JPEG,GIF和SVG图像。 3. SASS预处理 不用担心BCC使用Ruby来编译Sass,而节点1还不存在。 4. Uncss 这将删除样式表中所有未使用的css...

    proteus:用于Web和微服务开发的精益,精简且快速的JVM框架

    基于的极其轻便,灵活和高性能的Java框架,用于开发RESTful Web应用程序和微服务 没有魔术 易于使用和入门 有限的依存关系,<340kb> = 8并安装了当前版本的Maven。 复制并粘贴到您的终端中: /bin/bash -e <...

    redtorch:Java开源量化交易开发框架

    项目是基于Java语言开发的开源量化交易程序开发框架。 项目仓库地址: 提示 如果你看到当前这段话,说明那你正在浏览的是1.0.0版本分支 。 此分支大幅精简了0.3.0版本中的通讯协议,增加了HTTP WebSocket混合RPC模式...

    一个datax的简化工具,帮助您轻量级的完成datax的二次开发和同步任务.zip

    测试框架和工具则协助开发者编写和运行单元测试、集成测试及性能测试,确保软件质量。 版本控制与协作: 通过集成Git、SVN等版本控制系统,支持团队成员间的代码共享、分支管理、合并请求和冲突解决。 可视化...

    HerosPHP(PHP MVC开发框架)

    HerosPHP是一个免费开源的,快速、优雅的面向对象的 轻量级PHP MVC开发框架。...4、代码风格简洁漂亮,程序精简高效,但是注释详细,适合新手学习. 详细说明:http://php.662p.com/thread-1026-1-1.html

    Test404 HTTP Fuzzer v4.1

    稳 定:线程式的程序设计 精简化的代码质量 稀少的崩溃重启率 智 能:傻瓜式的配置向导 多样化的插件中心 自动化的启动优化 简 约:轻便化的框架设计 简洁化的设计理念 性能式的设计优化 高 效:毫秒级的响应速度 ...

    易语言程序免安装版下载

     支持库开发框架调整是扩展性调整,比较好的做到了向前向后兼容。即,新版支持库可被旧版易语言或易程序使用,旧版支持库也可被新版易语言或易程序使用(只是不支持静态编译)。  静态编译后的易语言EXE/DLL之间...

    MRCUDA:基于GPU的MapReduce加速框架

    MRCUDA中有四个松散耦合的阶段,包括预处理,映射,分组和精简,它们可以支持针对不同应用程序的灵活配置。 为了充分利用GPU并行性,在Group阶段设计并实现了一种双音排序算法,其性能优于一般的GPU排序算法。 最后...

Global site tag (gtag.js) - Google Analytics