当前位置: 首页 > news >正文

网站gzip压缩重庆新闻联播回看

网站gzip压缩,重庆新闻联播回看,北郊网站建设公司,seo推广营销公司随着 .NET 平台上#xff0c;LINQ、ORM 框架、Dynamic Data、... 各种数据访问技术不断推陈出新#xff0c;程序员也一直追着新技术跑#xff0c;但对底层和代码细节却越来越难以掌控。当项目性能需要调优时#xff0c;通常也只能对数据库加入更多索引#xff0c;而多数人…   随着 .NET 平台上LINQ、ORM 框架、Dynamic Data、... 各种数据访问技术不断推陈出新程序员也一直追着新技术跑但对底层和代码细节却越来越难以掌控。当项目性能需要调优时通常也只能对数据库加入更多索引而多数人已难以对数据访问的代码优化且手写 SQL 语句的功力似乎也持续退化中。 大家在拼命追求新技术时似乎已忘记微软的 MCTS 证照还有一门 ADO.NET 的科目 。且若有练好 ADO.NET 的基本功当项目遇到特殊需求时也才能手写得出来。例如下图 1 的「阶层式下拉菜单 (Hierarchical DropDownList)」功能很简单在实务上也常遇到但单纯靠 DataSource 控件难以实现必须手写 DataReader 来自定义细节。 本帖的示例下载点   http://files.cnblogs.com/WizardWu/100216.zip (执行第一個示例需要 VS 2008 或 IIS以及 SQL Server 的 Northwind 数据库)   (执行第二個示例需要 VS 2008 或 .NET 3.5以及 SQL Server 的 AdventureWorks 数据库)   (执行第二個示例需要 VS 2008 或 .NET 3.5以及 SQL Server 的 AdventureWorks 数据库) 一、DataReader 的变化应用、用 Get 开头的方法提升 DataReader 的性能  图 1 以 DataReader 实现的 Hierarchical DropDownList 上图 1 为本帖下载的第一个示例。在此 ASP.NET 示例中我们不用 DataTable 以免速度较慢又浪费内存 (此却为 DataSource 控件的默认选择)改用一个 DataReader 对象去两个表中各执行一句 SQL SELECT 语句最后将两个 result set 加载、合并到同一个 DropDownList 中。我在以前写的 C# 代码生成器 也用过类似的小技巧。 此示例若您将前台的 DropDownList 控件换成微软去年九月新推出的 ComboBox 这个可选也可输入的 AJAX 下拉菜单控件 此示例的 Code-behind 一行代码都不用改直接就可套用至 ComboBox 上。 示例一的 Code-behind 代码 在 DataReader 中使用基于「序列号」的查找 (column ordinal)比基于「命名」的查找 (column field name) 更有效率。例如上面的示例一我们用 dr.GetString(1) 或 dr[1].ToString()而不是用 dr[字段名称]。可分类如下 写法 (1) 使用 DataReader 索引 基于「序列号」的查找如dr[1].ToString()英文称为Index-based accessor写法 (2) 使用 DataReader 索引 基于「命名」的查找如dr[LastName].ToString()这是性能最不好的写法写法 (3) 使用 Get 开头的方法 基于「序列号」的查找如dr.GetString(1)英文称为.NET typed accessor写法 (4) 使用 GetSql 开头的方法 基于「序列号」的查找如dr.GetSqlString(1)英文称为Provider-specific typed accessor写法 (5) 基于「序列号」 GetOrdinal() 方法的查找。 其中的性能优劣由好到坏依序为(4) -- (3) -- (1) -- (2)。一般人會為了方便維護而採用 (2) 的基于「命名」查找的寫法殊不知其為性能最差的寫法。待會本帖后續的第 (二) 點會有實際的示例和測試數據。而 (5) 的 GetOrdinal() 寫法即是為了補足前述各種寫法的優缺點而誕生在本帖后续的第 (三) 点会介绍到它。 此外性能最好的 (4)以 GetSql 开头的方法仅适用于 SQL Server 7 以上版本的数据库。其底层采用 SQL Server 专属的 TDS (表格式資料串流) 格式来交换数据因此执行性能会比 (3) - 以 Get 开头的方法执行速度更快。而 OracleClient 命名空间也提供了 GetOracle 开头的方法可以使用但 OleDb、ODBC 则没有提供专属的方法。 二、用 Typed Accessors 提升 DataReader 的性能 本示例我们用 SqlDataReader 访问数据库各以前述的 (3)、(1)、(2) 的写法执行 100 次循环的查询测试其性能差距有多大。此 Console Mode 的示例二代码如下 示例二 - DataReaderTypedAccessors 执行结果如下图 2写法 (1) 的 Column ordinal比写法 (2) 的 Column name速度快上约 20 - 25 % 。且当循环加大到 1000 次时比例仍差不多。 而写法 (3) 的 Typed accessor比写法 (1) 的 Column ordinal 速度快上 27 %比写法 (2) 的 Column name速度快上约 37 % 。当循环加大到 1000 次时比例会有所变化。 由于 Typed accessor 可避免 Column ordinal、Column name 里重复的 boxing、unboxing 转型动作因此必然对性能有所助益。加上可搭配 IsDBNull() 方法来处理数据库的栏位为 NULL 的问题 (参考上方代码)因此是程序员手动撰码提取数据的首选写法。 图 2 示例二的执行结果三种写法各自耗费的时间 在这个示例中您还会发现按 Ctrl F5 执行但不调拭会比挟 F5 执行并调拭执行速度要快很多。 三、用 Column Ordinals 提升 DataReader 的性能  我们已经知道基于「序列号」的查找 (column ordinal)比基于「命名」的查找 (column field name) 更有效率。不过在实务上维护项目时表的字段序号 (或称索引) 有可能会变动或增减或在改写公司前人的 SQL 语句时亦有可能导致欲查询的字段与真正表中的字段不符。此时我们可透过 GetOrdinal() 方法来处理此种问题先以字段名称来查找所对应到此字段的正确序列号避免硬编码序列号所产生的字段提取不正确。 以下是 MSDN 的示例 [2] GetOrdinal 先执行区分大小写的查找如果失败则进行另一次不区分大小写的搜索。我们先调用单一次 GetOrdinal 方法取得特定字段的序列号再将结果分配给一或多个变量以便在后续的 DataReader 循环、实际提取值时来引用这些序列号。 private static void ReadGetOrdinal(string connectionString){ string queryString SELECT DISTINCT CustomerID FROM dbo.Orders;; using (SqlConnection connection new SqlConnection(connectionString)) { SqlCommand command new SqlCommand(queryString, connection); connection.Open(); SqlDataReader reader command.ExecuteReader(); // Call GetOrdinal and assign value to variable.  int customerID reader.GetOrdinal(CustomerID); // Use variable with GetString inside of loop. while (reader.Read()) { Console.WriteLine(CustomerID{0}, reader.GetString(customerID)); } reader.Close(); }} 以下是本帖提供下载的的第三个示例原理相同但我们将 GetOrdinal 方法所提取到的 ContactID、FirstName、LastName 三个字段的序列号分别搭配本帖前述的写法 (1)、写法 (3)、写法 (4)提取出内容相同的三个 result set而写法 (3)、写法 (4) 还能搭配 IsDBNull() 方法来使用。 示例三 - DataReaderColumnOrdinals 图 3 性能优劣由好到坏依序为写法 (4) -- 写法 (3) -- 写法 (1) 四、用 GetValues 方法一次提取記錄中所有字段的值  由于 Get 开头的方法一次只能提取记录中某一个字段的值为了提升执行性能从 ADO.NET 2.0 开始新增了一个 SqlDataRecord.GetValues 方法 [3] 。它会返回一个 Object 类型的数组里面包含目前这一条记录中所有字段的值。 但 GetValues 方法只能接收一个 Object 类型的数组如下方代码在撰码时虽然很方便但就有些文档宣称它可提升性能这点我是较不认同。 示例四 - GetValues 方法 此外DataReader 还有许多实务上很方便的功能例如GetName() 方法可用字段的序列号查找其对应的字段名称。若未曾翻阅过这些 ADO.NET 的 API 或书籍而只会用鼠标拖放 DataSource 控件、edmx、xsd在开发上很方便但仍有不足之处应该要对 ADO.NET 有一定的认识 (可惜博客园和一些论坛连这个分类项都没有)。  新的一年在大家一窝蜂地追求新技术、新框架、新的 IDE 工具时若您的公司要招聘新的程序员当心遇到对 .NET 4.0、VS 2010、LINQ、EDM、Dynamic Data、Silverlight、... 都能琅琅上口在 VS 里拖拉控件他也一把罩但对基础类库和 API 特性却毫不熟悉的人或需求稍微变化就不会写的人[9]。 相关文章 [1] SqlDataReader 成员 http://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqldatareader_members%28VS.80%29.aspx [2] SqlDataReader.GetOrdinal 方法  http://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqldatareader.getordinal.aspx [3] SqlDataRecord.GetValues 方法 http://msdn.microsoft.com/zh-cn/library/microsoft.sqlserver.server.sqldatarecord.getvalues%28VS.80%29.aspx [4] AJAX ComboBox Demonstration http://www.asp.net/AJAX/AjaxControlToolkit/Samples/ComboBox/ComboBox.aspx 参考书籍 [5] ADO.NET 3.5 Cookbook, chapter 10 (OReilly) http://oreilly.com/catalog/9780596101404/ http://www.amazon.com/ADO-NET-3-5-Cookbook-Cookbooks-OReilly/dp/0596101406/refsr_1_1?ieUTF8sbooksqid1266291565sr1-1 [6] ADO.NET 3.5 精研講座作者许熏尹出版社悦知出版社 (台湾书籍) http://www.delightpress.com.tw/book.aspx?book_idSKUP00004 其他 [7] 网站性能越来越差怎么办  http://www.cnblogs.com/WizardWu/archive/2009/01/03/1367527.html [8] 程序员真情忏悔录 http://www.cnblogs.com/WizardWu/archive/2009/01/29/1381275.html [9] 华山的剑宗、气宗 http://www.icoa.cn/show.asp?id246 http://blog.lawask.cn/lawyer-article-418.htm http://www.xiaoshuoplus.com/wuxia/64510/3234371.asp http://art.macd.cn/index/t-251861-a-268887.html [10] C# 代码生成器 网站架构设计 http://www.cnblogs.com/WizardWu/archive/2009/12/16/1625191.html
http://www.hkea.cn/news/14570839/

相关文章:

  • 网站建设的基础知识与维护兰州做网站 东方商易
  • 开网站赚钱分销平台官网
  • 营销外包网站定制化网站开发一般多少钱
  • 口碑好的网站建设公司哪家好产品展示栏目在网站中的作用
  • 网站建设公司的转型wordpress大学主题1.3
  • 潍坊网站制作软件怎么搭建网站 优帮云
  • 网站开发服务税率是多少当前主流的网站开发语言
  • 青岛网站建设公司招聘山东网站建设口碑好
  • 绿色环保材料网站模板python基础教程第二版
  • 上传下载网站模板安徽海鹏建设工程有限公司网站
  • 门户网站用什么程序做Wordpress怎么改成中文
  • 邢台医院网站建设深圳市住房和建设局红色警示查询
  • 网站 测速度搜索引擎优化时营销关键词
  • 百度有没有做游戏下载网站吗wordpress 文章样式
  • 怎么建设淘宝联盟的网站网站倒计时怎么做
  • 网站维护运营好做吗河南网站托管
  • 深圳凌 网站开发黄埔网站开发
  • 湘西北京网站建设上海装修公司排名统帅
  • 网页游戏网站搭建建设有限公司首页
  • 做网站还是做游戏wordpress 文章系统
  • 网站怎么做备份营销策划36计
  • 为网站网站做推广网站项目管理系统
  • 龙川县建设网站中山市住房和城乡建设局官网
  • 事业单位报名网站html网站引导页模板
  • 企业网站的设计与实现南平 建网站
  • 临沂市建设局兰山区网站wordpress漂浮框
  • 网站建设作业素材wordpress 缓存下不计数
  • 成都网站建设怎么样郑州做网站网络公司
  • 加强人社网站建设一个公司可以注册几个网站
  • 在线名片制作网站开发网站营销优化方案