`
lovecontry
  • 浏览: 1095182 次
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

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

使用 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 可以在定位您的二进制资源之前在文件系统中探测多个位置来查找最匹配的附属程序集。为作业使用适当的工具。

分享到:
评论

相关推荐

    .net精简框架程序设计(VB.NET)

    《.NET精简框架程序设计(VB.NET)》是一本专注于使用VB.NET语言在.NET精简框架下进行软件开发的教程。这本书的核心是讲解如何在资源有限的环境中,如嵌入式设备或移动设备,利用VB.NET进行高效、实用的编程。通过附带...

    <.net 精简框架程序设计>

    《.NET 精简框架程序设计》是一个深入探讨如何在有限资源环境下,利用.NET精简框架进行高效软件开发的主题。.NET精简框架(.NET Compact Framework)是微软为嵌入式设备和移动设备设计的一个轻量级版本,它提供了...

    PHP最精简框架

    【PHP最精简框架】是一种基于PHP编程语言的微型Web应用程序框架,旨在简化开发过程,提高代码可读性和可维护性。这样的框架通常包含了路由、控制器、视图、模型等核心概念,但以极简的形式呈现,使得开发者可以快速...

    微软.net精简框架最常见问题及回答.doc

    14. **如何将.NET精简框架组件放入全局程序集缓存(GAC)?** 通常,部署时Visual Studio会自动处理,但也可以使用gacutil.exe工具手动操作。 15. **如何处理“SharingViolation”错误?** 这通常是由于文件锁定...

    SpringMVC+myBatis+MSSQL Server数据库web精简框架

    总结,"SpringMVC+myBatis+MSSQL Server数据库web精简框架"是一个典型的Java Web开发项目结构,它将Spring MVC负责的请求分发、MyBatis处理的数据访问和SQL Server的数据库存储有效地结合在一起,形成一个完整的数据...

    SSHID五大框架最新精简jar包

    这些jar包的精简版意味着它们已经去除了不必要的依赖和组件,只保留了最常用的功能,有利于减小程序体积,提高运行效率。在实际开发中,开发者可以根据项目需求选择相应的jar包,或者进一步定制自己的类路径。 在...

    微信小程序项目实例-精简小程序商城源码纯前端项目

    在这个“微信小程序项目实例-精简小程序商城源码纯前端项目”中,我们可以深入学习和理解微信小程序的开发流程、技术栈以及如何构建一个简单的小程序商城。 首先,我们要知道,微信小程序的开发主要基于JavaScript...

    一个精简php mvc框架 CrazyPHP

    CrazyPHP是一个专门为初学者设计的轻量级PHP MVC(模型-视图-控制器)框架,它的设计灵感来源于ThinkPHP,但更为精简,旨在帮助开发者快速理解和掌握PHP框架的基本原理和开发模式。在这个框架中,你可以看到MVC模式...

    Biny腾讯开源高性能超轻量级PHP框架

    其中,Biny脱颖而出,它是一款由腾讯开源的高性能、超轻量级PHP框架,专为快速构建现代Web应用程序而设计。Biny以其简洁优雅的代码和易于理解的架构,吸引了许多开发者的眼球。 **框架概述** Biny遵循经典的MVC...

    Java ssh精简包

    Java SSH(Struts + Spring + Hibernate)框架是一个广泛使用的开源企业级应用开发框架,它将Struts、Spring和Hibernate三个强大的框架集成为一体,极大地提高了Java开发者构建Web应用程序的效率。这个"Java SSH精简...

    一套精简版的js前台验证框架(非常实用)

    同时,由于验证发生在客户端,可以减轻服务器端的压力,提高系统的整体性能。 在实际应用中,开发者可以结合HTML5的内置验证特性,如`required`、`pattern`等,与这个精简版的js验证框架相结合,以达到更全面、更...

    visual c# 速成精简版

    6. **异步编程**:C#的async/await关键字让异步编程变得更加简单,可以提高应用程序的响应性和性能。 7. **泛型**:泛型允许创建可重用的类型,可以应用于任何数据类型,提高了代码的灵活性和效率。 在压缩包中的...

    精简版JRE.rar

    2. **Java核心类库**:包括基础类库如集合框架、输入输出、网络编程、多线程等,这些类库为开发者提供了丰富的API,用于构建各种类型的应用程序。 3. **其他支持文件**:包括本地库(如JNI库),安全相关组件,以及...

    msp430f149程序框架

    MSP430系列采用精简指令集计算机(RISC)架构,旨在提供高效能和低功耗。MSP430F149内核包含16位的指令集,支持单周期执行大部分指令,提高执行效率。 2. **程序存储器** MSP430F149的程序存储器通常为闪存...

    9100自带程序精简列表

    本文将详细介绍I9100中哪些预装程序可以安全删除或禁用,以便优化设备性能,提高用户体验。 #### 可以考虑删除或禁用的应用程序与服务 **1. 同步设置相关** - **AccountAndSyncSettings.apk**: 用于账户同步设置...

    手机一键精简V2.1

    2. **dodex**:Dodex是一种针对安卓系统的优化技术,它将dalvik缓存(用于运行应用程序的虚拟机)转换为dex文件,以提高系统运行速度和减少内存占用。但dodex操作需要一定的专业知识,普通用户可能难以执行。 3. **...

    安卓精简列表已整理测试.pdf

    其中,应用程序层是用户与Android系统交互的窗口,应用框架层提供了基本的应用程序组件,系统服务层提供了系统服务,Linux内核层则提供了基本的系统服务。 2. 精简列表:精简列表是Android系统中的一个重要概念,指...

    jre1.8 64位精简精版.zip

    JRE的精简通常涉及移除不必要的组件、示例程序、本地语言资源等,以达到减小安装包体积的目的。在SWT(Standard Widget Toolkit)和JFace的桌面应用开发中,通常只需要核心的JVM和基本的Java类库,因此这种精简版JRE...

    ssh企业级框架精简版本,纯注解,绝对原创

    SSH企业级框架精简版本是基于Spring、Struts2和Hibernate这三个开源框架的集成,它在企业级开发中被广泛使用,特别是在Java后端开发领域。这个精简版的SSH框架去除了不必要的复杂性,更适合初学者快速理解和实践。在...

Global site tag (gtag.js) - Google Analytics