知识大全 掌握ADO.NET的十个热门技巧[3]

Posted

篇首语:青,取之于蓝而青于蓝;冰,水为之而寒于水。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 掌握ADO.NET的十个热门技巧[3]相关的知识,希望对你有一定的参考价值。

掌握ADO.NET的十个热门技巧[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   尽可能用预先排序的数据

  ADO NET对象模式使我们可以很容易地实现排序 你可以创建一个DataView对象并设置其Sort属性 ADO NET runtime查看新的排序表达式并为视图重编索引 该步骤是在内存中实现的 但速度并不快 排序的花费很高 更重要的是 它并不是个线性操作(linear operation) 对一组数据进行排序需要n*log(n)的计算成本 就是说 随着需要排序的条目数量的增加 直线增加的成本是很大的 因此 你应该限制应用程序中的排序 尽可能地运用预先排序的数据 在Web应用程序中 动态排序对性能的影响是相当大的 既然如此 你就应该设计应用程序 限制对动态排序的需求 并依赖在数据库服务器中写死的算法 除非你在用应用程序的一个可以使复杂性低于n*log(n)极限的特殊的功能 否则避免运用手工排序算法 因为这种算法可能比系统中的算法更糟     ADOX可以帮你得到并改变Schema信息

  ADO NET并没有为得到并管理schema信息提供一个完全的对象模式 你应该用ActiveX Data Objects Extensions for Data Definition Language and Security (ADOX)或用每个数据库提供的本地功能来得到并改变Schema信息 ADOX是ADO对象的一个扩展 它包括用来创建和修改Schema的对象 你可以编写适用于各种数据源的代码(不管本地语法有什么不同) 因为ADOX是管理schema的一个基于对象的方法    你可以用一个data reader对象来读(不是设置)简单的schema信息 所有的data reader类(OleDbDataReader SqlDataReader OracleDataReader)都提供了一个GetSchemaTable方法 该方法可以读取查询到的列的元数据信息 GetSchemaTable返回一个DataTable对象(格式是每列一行)和固定的一组包含信息的列 返回的元数据可以分成三类 列元数据 数据库特征和列属性 返回的列可以是AllowDBNull IsAutoIncrement ColumnName IsExpression IsReadonly和NumericPrecision等 在MSDN资料中有完整的列表(见附加资源)    在调用ExecuteReader时 如果你执行KeyInfo命令 那么GetSchemaTable方法就可以返回更精确的数据 你可以将KeyInfo行为同缺省的行为结合起来 执行一个单独的命令并得到schema和数据

 reader = cmd ExecuteReader( _ CommandBehavior KeyInfo Or _ CommandBehavior CloseConnection) 

  只有执行KeyInfo IsKey BaseTableName IsAliased IsExpression和IsHidden字段的值才能被正确返回 如果执行KeyInfo 关键的列(如果有)通常是添加在结果集的底部的 但不给它们返回数据

   用一个派生的类和自定义的串行化来节省空间

  只有两个ADO NET对象是被标记为可串行化的——DataTable和DataSet NET Framework中的串行化是通过formatter对象来完成的 它们可以将一个对象实例保存到一个二进制或一个SOAP流(stream)中 NET formatter用Reflection来提取任何必要的信息 然而 如果这个类实现了ISerializable接口 那么 NET formatter就会给接口的方法让步 让它们负责拷贝需要串行化到一个内存缓冲器中的所有的信息 DataTable和DataSet类都通过ISerializable接口支持串行化    如果你将一个DataTable或一个DataSet串行到一个二进制(binary stream)中 你应该可以得到非常紧凑的输出结果 虽然你得到的结果文件是最小的 但遗憾的是 它实际上并不小 荒谬的是 你保存到一个二进制的DataSet比你用WriteXml方法保存到XML的同样的DataSet要大很多    要解释这种情况 我们需要来看看ADO NET对象是用什么方式被串行起来的 在串行一个DataSet对象时 它将基于XML的DiffGram表示法保存在formatter的缓冲器中 在串行一个DataTable时 它首先创建了一个临时的DataSet对象 将它定义为它的parent 然后作为一个DiffGram串行起来    一个DiffGram是一个XML流 它提供了一个DataSet中表和行的有状态的表示法 一个DiffGram文件是很详细的 有些冗长 DiffGram包含当前的数据 以及被修改的行和未解决的错误的初始值 当我们保存一个DataSet或一个DataTable时 所有这些信息就会被传递给serializer 被串行化的对象总是包含XML数据 因此即使当输出流是二进制的时 最后的输出结果仍然会很大    你可以创建一个继承DataTable或DataSet的新的可串行化的类来解决这个问题 并且更有效地保存ADO NET对象 你必须用<Serizlizable()>属性来标记新类 即使父类是可以串行化的 实际上 串行性(serizlizability)并不是一个可以自动继承的类属性 你从DataTable或DataSet构建的新类也可以实现ISerializable接口 当然 你可以为新类选择一个不同的串行化方案 一个简单而有效的方法就是将DataTable类的所有成员映射到数组和值成员中    运用一个派生的类和一个自定义的串行化方案可以为一个DataSet对象节省多达 %的磁盘空间 节省的空间的比率取决于DataSet中的数据类型 你的数据越基于文本 节省的空间越多 然而 运用二进制的BLOB字段只可以节省大约 %的空间(下载一个完整的例子)     选择一个适合你的数据的分页机制

  DataGrid服务器控件使我们可以更容易地在Web应用程序中以长度可变的页面来显示数据了 该控件有绑定和格式化功能 它可以接受一个ADO NET数据对象并为浏览器生成HTML代码 出于性能的原因 在页面的视图状态 DataGrid并没有缓存数据源的内容 因此 当返回页面时 你就必须填充grid 要实现这一点可以用两种方法 在Web服务器上将数据源作为整体或一部分缓存起来 然后读回 或者对每个请求从物理数据库加载所需的记录 如果你选择第一种方法 那么数据就从存储中只被读取一次 保存在一个缓存中 并为以后的postback事件读回 我们通常用内存中的全局对象(如Session或Cache)来保存这个数据 我们用DataSet来搜集所有需要的数据并将它保存在内存中 将一个DataSet对象保存在Session中同ADO中的线程含义并不一样 但是通过减少Web服务器可用的内存仍可以影响可扩展性    如果要显示的数据是特定于session的 那么在每次返回页面时加载记录页面就比用一个DataSet和ASP NET全局对象来缓存数据要好 编写得很好的SQL代码可以将结果集分成许多页 再加上DataGrid控件内置的自定义分页机制 我们就可以得到最佳的解决方案来保持ASP NET应用程序的可扩展性和良好的性能了

cha138/Article/program/net/201311/15152

相关参考

知识大全 掌握ADO.NET的十个热门技巧[1]

掌握ADO.NET的十个热门技巧[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ADONE

知识大全 掌握ADO.NET的十个热门技巧[4]

掌握ADO.NET的十个热门技巧[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   对于Wi

知识大全 程序员要掌握的十个JSP中的标签库

程序员要掌握的十个JSP中的标签库  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  JSP最容易忽

农机维修的十个小技巧

农机在使用过程中出现故障问题是在所难免的,因此,掌握一定的农机维修技巧是很有好处的。农机维修可是一门大学问。有时候需要动点“小脑筋”。以下是农机维修过程中的一些小技巧,供借鉴参考:1、巧装气缸冬季由于

农机维修的十个小技巧

农机在使用过程中出现故障问题是在所难免的,因此,掌握一定的农机维修技巧是很有好处的。农机维修可是一门大学问。有时候需要动点“小脑筋”。以下是农机维修过程中的一些小技巧,供借鉴参考:1、巧装气缸冬季由于

农机维修过程中的十个小技巧

农机在使用过程中出现故障问题是在所难免的,因此,掌握一定的农机维修技巧是很有好处的。农机维修可是一门大学问。有时候需要动点“小脑筋”。以下是农机维修过程中的一些小技巧,供借鉴参考:1、巧装气缸冬季由于

农机维修过程中的十个小技巧

农机在使用过程中出现故障问题是在所难免的,因此,掌握一定的农机维修技巧是很有好处的。农机维修可是一门大学问。有时候需要动点“小脑筋”。以下是农机维修过程中的一些小技巧,供借鉴参考:1、巧装气缸冬季由于

知识大全 实现人生目标的十个理由

实现人生目标的十个理由1、为了帮别人。2、为了自己。3、报答父母。4、报答帮助过你的人。5、不辜负别人的期望。6、不让为这件事情死的人白死。7、为了整个社会。8、为了这个世界。9、让自己活的有意义。1

知识大全 世界上环境最好的十个国家

世界上环境最好的十个国家最佳居住地排名前十位国家1挪威2瑞典3澳大利亚4加拿大5荷兰6比利时7冰岛8美国9日本10爱尔兰全球最适合人类居住的国家和城市前十名名次城市名称所在国家1墨尔本澳大利亚1温哥华

知识大全 让面试失败的十个坏习惯

  1、面试时迟到,而且称自己迟到是因为别人指错了方向。  2、不修边幅或者着装不当。坐姿懒散,与主持面试的人不保持良好的目光接触。  3、