[随笔分类]Microsoft .NET
文章平均质量分 75
chen_xizhang
服务于微软.NET 平台,SQL Server 平台,Office平台
架构师、资深顾问,高级讲师
展开
-
如何在ASP.NET页面中使用异步任务(PageAsyncTask)
在页面加载期间,可能有些操作是要比较耗用时间的(例如调用外部资源,要长时间等待其返回),正常情况下,这个操作将一直占用线程。而大家知道,ASP.NET在服务端线程池中的线程数是有限的,如果一直占用的话,就会导致其他操作需要等待。 在ASP.NET 2.0中,提供了一种异步页的技术。微软有一个专门的文档介绍这个技术 看看下面这个图,很重要 【注意】ASP.NET的异步机制与windows Fro原创 2009-07-12 19:56:00 · 976 阅读 · 0 评论 -
LINQ : 与T-SQL的比较对照表
LINQ是一个不错的东西,我一直都这么觉得。很多朋友对他的语法都感到好奇,因为它很多地方确实与T-SQL很类似。但也有不同的地方。下面我整理了一个对照表 T-SQL关键字 LINQ表达式关键字 LINQ扩展方法 Select Select Select,SelectMany Top Take,Takewhile Distinct Distinct From From … In原创 2009-07-16 22:49:00 · 461 阅读 · 0 评论 -
.NET : 单元测试到底给我们带来什么
前两天在讲VSTS方面的课程时,我再一次讲到并强调了单元测试。席间,有同学不太了解为什么要做单元测试。当然,这是一个根本性的问题,绝大多数的朋友都或多或少曾有过这样的疑惑吧。 我还是要总结一下,单元测试的作用 1. 给开发人员带来自信心 2. 确保代码是符合需求的 我们日复一日地写各种各样的代码,一个接着一个地编写各种类型,以及实现他们内部的各种方法,而且很多时候我们又会回过头去修改某些方法。这种原创 2009-07-16 14:41:00 · 436 阅读 · 0 评论 -
VSTS : 比较性能基准
我们在对代码性能进行调优的时候,通常有这样一个希望:调优之后能不能有什么办法直观地让我们看到改善的情况,例如哪些指标是提高了,哪些指标反而是下降了等等。在VSTS的开发人员版中提供了这样的工具,做法就是做两次性能检测,然后比较他们的报告 比较的结果大致如下 本文由作者:陈希章 于 2009/7/16 15:17:16 发布在:http://www.cnblogs.com/chenxizh原创 2009-07-16 15:17:00 · 426 阅读 · 0 评论 -
Testing AJAX Applications with VSTS 2008
在下面这篇文章中,Jeff Levinson介绍了如何在VSTS 2008中对AJAX应用程序进行测试。 http://visualstudiomagazine.com/articles/2007/10/18/testing-ajax-applications-with-vsts-2008.aspx 我觉得奥妙在于下面这里(一个特殊的标头 request的Header) AJAX测试步骤中,返原创 2009-07-16 16:11:00 · 394 阅读 · 0 评论 -
.NET 3.5 : 读写RSS或者ATOM
在.NET 3.5中提供了一套全新的接口来实现对RSS和ATOM这两种数据文件的读写。非常方便。下面演示一下 1. 首先要添加一个引用System.ServiceModel.Web using System.ServiceModel.Syndication;using System.Xml; 2. 读取RSS的代码 /// /// 从一个远程站点读取RSS/// /// /// p原创 2009-07-16 16:49:00 · 567 阅读 · 0 评论 -
LINQ : 谈谈LINQ TO SQL中的直接加载和延迟加载
在LINQ TO SQL中,有两种主要的加载模式:直接加载和延迟加载. 这是有一个选项来控制的;DeferredLoadingEnabled。这是DataContext的一个属性,默认为true 那么,什么叫延迟加载?简单的说就是按需加载,也就是只有在需要的时候才加载。这样当然是有些好处的。 但是,关键是说,如果某部分数据我们确定就是要加载的,那么如果再去延迟加载可能就不合适了,此时就应该选用直接原创 2009-07-17 07:01:00 · 606 阅读 · 0 评论 -
再谈谈LINQ TO DataSet
首先,这个功能是通过扩展方法来实现的,需要引用System.Data.DataSetExtensions这个程序集 其次,针对DataSet有两种情况 第一种是非类型话的DataSet,下面代码是一个示例 DataSet ds = new DataSet(); using (SqlConnection conn = new SqlConnection("server=(local);data原创 2009-07-17 09:20:00 · 563 阅读 · 0 评论 -
LINQ : 在LINQ TO SQL中关闭ObjectTrackingEnabled提高性能
LINQ TO SQL的默认加载模式中还有一个选项:ObjectTrackingEnabled,该选项默认是true,表示要为所有对象提供跟踪。其实通俗地说就是,所有对象都要可读,可写。既然要可写(或者可更新),那么就需要一个额外的工作量记录对象的一些属性变化的情况。 假设,在当前使用中,我们并不需要进行更新,而仅仅是查询,那么就可以把ObjectTrackingEnabled关闭掉。 db.Ob原创 2009-07-17 07:08:00 · 1281 阅读 · 1 评论 -
VSTS : 在性能调优中找到瓶颈所在
VSTS 2008 的开发人员版(Develop Edition)中有一个很不错的功能,可以对代码执行速度进行分析,而且可以通过一个所谓的hotpathing的方式,定位到性能瓶颈所在的方法,下面是一个截图 本文由作者:陈希章 于 2009/7/16 15:06:54 发布在:http://www.cnblogs.com/chenxizhang/ 本文版权归作者所有,可以转载,但未经作者原创 2009-07-16 15:07:00 · 352 阅读 · 0 评论 -
LINQ : 如何在JOIN或者GROUP BY的时候使用复合键
在LINQ中,可以很方便地进行JOIN或者GROUP BY的操作。但一般情况下,它们都是基于一个键的。如果想要基于多个键进行JOIN或者GROUP BY,则可以参考下面的语法 var query = from o in db.Orders from p in db.Products join d in db.OrderDetails on new {o.OrderID,原创 2009-07-16 21:38:00 · 778 阅读 · 0 评论 -
LINQ : 如何为LINQ TO SQL实现自定义业务逻辑
LINQ TO SQL很好很强大,它几乎包含了我们能够想到的所有与数据库有关的操作,甚至也包含了一些我们可能都没有想到的。 但不管怎样,也许我们需要在LINQ TO SQL的操作中添加一个自定义业务逻辑,例如在插入某个实体的时候编写日志等等。如何实现这样的功能呢? 其实这一点,LINQ TO SQL在设计的时候也考虑到了。我们可以打开那个dtml文件的designer.cs文件,我们发现有些隐藏的原创 2009-07-16 22:32:00 · 508 阅读 · 0 评论 -
LINQ : 对LINQ TO SQL 查询进行编译
经常和人讨论到LINQ TO SQL的性能问题,我们都知道,LINQ TO SQL多少会有一些性能损耗,因为它的查询和操作语句都是动态拼接的。但我也觉得,这不可能是性能的瓶颈所在。 但是,有没有什么办法可以尽量地提高LINQ TO SQL的性能吗? 这一篇,我介绍一下对LINQ TO SQL查询进行编译的一个方法 例如我们经常需要按照城市检索,然后输出客户列表,我们可以预先将该语句进行编译,如下面原创 2009-07-16 22:55:00 · 552 阅读 · 0 评论 -
LINQ : 在LINQ TO SQL中使用事务和控制并发
LINQ TO SQL,顾名思义,涉及到了数据库操作。那么就会有一个事务的概念,例如,假设我们需要一次性插入两个实体,但希望保证这两个操作的完整性的话。 1. 隐式事务 其实,即便我们不写代码,LINQ TO SQL也会自动创建一个事务的。默认事务隔离级别为ReadCommitted 2. 显式事务 我们也可以自己写代码,来明确地控制事务,默认事务隔离级别为ReadCommitted Nort原创 2009-07-17 07:35:00 · 3424 阅读 · 0 评论 -
C# 3.0: 局部方法(partial method)及其特点
我们知道,在C# 2.0中引入了一个局部类(partial class)的概念,它允许我们在不同的文件中编写一个类型的多个部分,编译器会做合并编译。 C# 3.0又开始引入了一个新的语法:局部方法 它的思路大致是这样:方法声明和方法实现可以分开来做。 public partial class MyClass{ //声明方法 partial void SomeMethod(); }原创 2009-07-17 09:46:00 · 754 阅读 · 0 评论 -
LINQ : 如何在LINQ to SQL中删除数据库中的行
http://msdn.microsoft.com/zh-cn/library/bb386925.aspx 可以通过将对应的 LINQ to SQL 对象从其与表相关的集合中删除来删除数据库中的行。LINQ to SQL 会将更改转换为相应的 SQL DELETE 命令。 LINQ to SQL 不支持且无法识别级联删除操作。如果要在对行有约束的表中删除行,则必须完成以下任务之一: 在数据库的原创 2009-07-22 23:05:00 · 677 阅读 · 0 评论 -
.NET : 再谈谈多线程
这几天在讲.NET核心编程时再次探讨到了多线程这一部分。其中,我们讨论到如果使用BackgroundWorker这个组件的话,那么它的几个事件到底是运行在几个线程的。下面是一个例子 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.ComponentModel原创 2009-07-21 05:56:00 · 448 阅读 · 0 评论 -
LINQ : 如何在LINQ to SQL中管理冲突
http://msdn.microsoft.com/zh-cn/library/bb399389.aspx LINQ to SQL 提供了一个 API 集合,用以帮助您发现、评估和解决并发冲突。 本节内容 如何:检测和解决提交冲突 (LINQ to SQL) 介绍如何检测和解决并发冲突。 如何:指定并发异常的引发时间 (LINQ to SQL) 介绍如何指定应何时通知您出现并发冲突。原创 2009-07-22 23:11:00 · 392 阅读 · 0 评论 -
.NET : 如何将16进制颜色代码转换为十进制
在网页中颜色代码一般都是用16进制保存的,但这段16进制的文本如何转换为10进制呢 请参考下面的方法 private int Hex2int(string hex){ return int.Parse(hex, System.Globalization.NumberStyles.HexNumber);} 本文由作者:陈希章 于 2009/7/24 6:53:45 发布在:http://w原创 2009-07-24 06:54:00 · 1154 阅读 · 0 评论 -
.NET : 如何获取磁盘文件的摘要信息
在日常的开发工作中,我们经常需要操作各种各样的文件。其中有一个很重要的任务就是要能够读取特定文件的信息,并据此做出一些相应的设计。 在.NET Framework中的System.IO命名空间下,提供了FileInfo这个类型。该类型可以很方便地创建和使用。但它包含的信息只是下图所示的常规信息。 例如 static void Main(string[] args){ string fil原创 2009-07-27 09:29:00 · 522 阅读 · 0 评论 -
.NET : 单元测试的几个Attribute介绍
之前我有专门的博客探讨了什么是单元测试,以及为什么要单元测试,如果大家有兴趣,可以参考下面的链接 http://www.cnblogs.com/chenxizhang/archive/2009/07/16/1524847.html 本文再具体探讨一下VSTS提供的单元测试工具附带的几个Attribute的用法 基础 1. TestClass 这是对一个类的标记,表明这个类型是一个用来测试的类型。原创 2009-07-28 10:17:00 · 541 阅读 · 0 评论 -
.NET : 如何强制规定货币数据的区域性
今天在讲到多语言设计,其中讨论不同语言环境下的货币显示问题。我们一般都同意,可以针对页面的显示元素做多语言,但对于货币这个部分,应该还是要统一为一个,否则就很容易造成误会。例如¥1000和$1000当然差别是很大的。 那么,怎么样确保一个货币数据,总是显示某种区域性呢?例如不管当前是什么样的语言设置,都显示人民币。 答案是:可以在货币的ToString方法中指定zh-CN为其区域性。 int to原创 2009-07-26 22:19:00 · 463 阅读 · 0 评论 -
.NET : 通过配置文件指定跟踪(trace)选项
在应用程序开发和调试期间,我们经常需要在代码中添加一些跟踪功能。此时可能会用到System.Diagnostics下面的Debug和Trace两个类型。具体的用法请参考帮助文档。 本文介绍的是,如何通过配置文件的方式来指定跟踪选项,例如指定监听器 请在web.config中添加下面的内容 然后,在任何地方,只要想输出跟踪信息,就可以使用如下的语原创 2009-07-28 12:13:00 · 544 阅读 · 0 评论 -
.NET : 监控ASP.NET应用程序的缓存使用内存数变化和命中情况
在ASP.NET开发中,我经常强调,数据的合理缓存是对性能很重要的一个因素。关于ASP.NET的缓存,一般会有三种做法 1. 页面缓存 2. 控件缓存 3. 数据缓存 其中又以数据缓存这种方式最为灵活,用的最广。 我们不光要会做缓存,还需要评估缓存的使用情况,利用性能监视工具,可以很容易做到这一点。如下图所示 下面是我写的测试代码 /// /// 创建100个缓存项目/// /// ///原创 2009-07-28 10:41:00 · 660 阅读 · 0 评论 -
.NET : 在单元测试中使用外部文件作为数据源
全文链接:http://msdn.microsoft.com/zh-cn/library/ms243192(VS.80).aspx 核心的部分如下: 1. 配置文件 【注意】红色部分,如果是使用VS2008的话,需要改成Version=9.0.0.0 dbq需要写一个绝对路径,否则找不到文件。 type="Microsoft.VisualStudio.Te原创 2009-07-28 09:19:00 · 637 阅读 · 0 评论 -
.NET : 如何将大文件写入到数据库中
最近利用空闲时间自己在写一个文件备份工具,因为我磁盘上的很多文件很重要,例如很多PPT和讲义。所以需要经常备份,而且因为这些文件很多,所以需要增量备份。 我尝试用过windows自带的ntbackup工具,但感觉不是很爽。它不支持压缩备份,而且界面也有点复杂。 为了响应伟大领袖的“自力更生,丰衣足食”的号召,咱决定自己写一个工具,专门备份到数据库。支持压缩,支持加密,支持增量。 本文分享一下其中一原创 2009-07-28 09:56:00 · 568 阅读 · 0 评论 -
.NET : 在单元测试中使用外部文件作为数据源
全文链接:http://msdn.microsoft.com/zh-cn/library/ms243192(VS.80).aspx 核心的部分如下: 1. 配置文件 【注意】红色部分,如果是使用VS2008的话,需要改成Version=9.0.0.0 dbq需要写一个绝对路径,否则找不到文件。 type="Microsoft.VisualStudio.Te原创 2009-07-28 09:59:00 · 645 阅读 · 0 评论 -
.NET : 自定义TraceListener
上一篇我们讲到了使用Trace的功能对代码进行跟踪。我记得很多朋友多问过我,有没有办法将这个跟踪的消息写入到一个数据库中去呢? 答案是可以的,但是并不常用。因为如果跟踪依赖数据库的话,首先写这个消息所需要的资源比较多,而且也容易出故障,例如你不能保证数据库的一直可用性。 不管怎样,我还是演示一下如何自定义,并且如何使用的过程 1. 创建一个demo数据库,里面建立一个表格 USE [demo]GO原创 2009-07-28 12:29:00 · 613 阅读 · 0 评论 -
.NET : 如何使用Base 64存取图片
在平常编程的过程中,我们经常需要用到图片。对于图片的保存,大家一定有各种各样的方法。这里介绍一下如何使用Base 64编码的方式来存取 使用下面的代码可以将图片保存为一个文件 MemoryStream ms = new MemoryStream();pictureBox1.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); byt原创 2009-08-01 07:42:00 · 703 阅读 · 0 评论 -
.NET : 如何理解字符串和它的字节表现形式
我们都知道,在计算机中唯一能够识别的是二进制的。但在编程人员的世界里面,我们会使用大量的数据类型(例如数值,字符,字符串等),他们是怎么被处理成二进制的呢? 下面的例子演示了如何在字符串和字节数组之间转换,并且提到了一个特殊的字符串编码格式,就是所谓的Base 64. using System;using System.Text; namespace ConsoleApplication3{原创 2009-08-01 07:18:00 · 575 阅读 · 0 评论 -
.NET : 如何理解字符串和它的字节表现形式
我们都知道,在计算机中唯一能够识别的是二进制的。但在编程人员的世界里面,我们会使用大量的数据类型(例如数值,字符,字符串等),他们是怎么被处理成二进制的呢? 下面的例子演示了如何在字符串和字节数组之间转换,并且提到了一个特殊的字符串编码格式,就是所谓的Base 64. using System;using System.Text; namespace ConsoleApplication3{原创 2009-08-01 07:44:00 · 380 阅读 · 0 评论 -
.NET : 关于图片格式的问题
在我们的程序里面,很多地方会用到图片。而对于图片的存取就显得非常重要了。在存取图片这个问题上,格式是很关键的一个话题。 例如说,如果原来的图片是jpg,而你试图将其用bmp保存或者读取,就可能导致问题。或者即便不出问题,在存储机制上也有很大的差异 下面这个截图,可以看到,我原先一个jpg的图片,体积为29KB,然而我强制保存为bmp后,虽然能打开,但是体积为399KB了。 所以,就有必要搞明白原创 2009-08-01 08:17:00 · 668 阅读 · 0 评论 -
.NET : 再谈谈XML中的命名空间问题
我之前有专门的文章讨论过在XML文件中的命名空间问题,事实上,这个命名空间的设计是XML规范中惹来争议最多的一个部分。其出发点是为了更好地标识元素,但事与愿违,它其实更多的时候是增加了麻烦。这方面的讨论很多,这里就不赘述了。 今天我还是用简单的例子再说说如何在编程中处理命名空间的问题 1. 如何在创建XML文档的时候加入命名空间 ///创建一个带有默认命名空间的XML元素///该命名空间不带前缀C原创 2009-08-06 09:46:00 · 669 阅读 · 0 评论 -
.NET : LINQ TO XML中进行XML文件验证
using System;using System.Xml.Schema;using System.Xml.Linq; //LINQ TO XML中,通过对System.Xml.Schema的扩展实现了简单方便的架构验证功能 string xmlFile = "..//..//OrderData.xml";string xsdFile = "..//..//OrderSchema.xsd"; X原创 2009-08-06 10:07:00 · 584 阅读 · 0 评论 -
XML数据库
这是我正在开发的一个产品。很好理解,它是一个数据库产品(或者称为解决方案),而且它直接就用XML存储数据。 以下是一些基本介绍: 区别于现行的主流数据库,它的数据就是直接用XML文件存储的,而且它不是一个简单的关系型,也不是二维的。一份表格中的数据可以包含多个层次: 典型的例子是:订单表,除了包含订单的概要信息(订购单号,客户编号,订购日期等),还应该包含订单明细(产品编号,单价,数量等),以原创 2009-08-08 19:23:00 · 596 阅读 · 0 评论 -
XML数据库一睹为快
这是我正在开发的XML数据库的一个演示程序片段。该项目目前还不完整,会在合适的时候开源。 有关该数据库的一些介绍,请参考 http://www.cnblogs.com/chenxizhang/archive/2009/08/08/1541888.html 简单地说,这是一个用XML作为数据存取源的数据库设计方案。完全基于.NET和XML技术,并且使用了LINQ的技术。我自己总结该数据库是:XML+原创 2009-08-09 18:18:00 · 517 阅读 · 1 评论 -
XML数据库一睹为快
这是我正在开发的XML数据库的一个演示程序片段。该项目目前还不完整,会在合适的时候开源。 有关该数据库的一些介绍,请参考 http://www.cnblogs.com/chenxizhang/archive/2009/08/08/1541888.html 简单地说,这是一个用XML作为数据存取源的数据库设计方案。完全基于.NET和XML技术,并且使用了LINQ的技术。我自己总结该数据库是:XML+原创 2009-08-09 18:22:00 · 442 阅读 · 0 评论 -
.NET : 如何动态根据一个业务实体类型创建XSD架构文件
这是正在开发的XML数据库的一个功能,我需要动态根据一个业务实体类型创建一个XSD架构文件,并使用其对最后的XML数据文件进行约束。 目前该功能仅仅是一个原型,还有待细化改进。例如在实体的成员上用一些特定的Attribute标明该成员要被保存的形态。 第一部分:业务实体类 (作为演示目的,我将所有的类型定义在一个文件里,同时每个类都只有少量简单的属性成员) 此处特别注意的是,Order这个类是很复原创 2009-08-10 11:55:00 · 824 阅读 · 0 评论 -
.NET : 如何在生成XML文档时绑定样式表
我们都知道,XML是一种特殊格式的数据文件,它与HTML的一个很大的区别在于它自己不能描述自己,也就是一份XML数据文档一般没有格式。它的格式,需要通过所谓的样式表文件来定义,这种文件一般称为xsl或者xslt文件。 下面的代码演示了如何在动态构造一份XML文档的时候指定要绑定的样式表。 using System; using System.Xml.Linq; namespace Consol原创 2009-08-06 19:07:00 · 448 阅读 · 0 评论 -
.NET : 使用ReadDirectoryChangesW监控文件夹的变化
近日在讨论到之前我发布的“文件同步工具”时,有朋友建议用ReadDirectoryChangesW方法去做监控。我个人觉得,如果在C#中做监控的话,首选还是.NET Framework封装好的FileSystemWatcher去做。但我以为,监控也有监控的烦恼,就是说要一直监控。而一旦中途停止监控,又自然会涉及到一个状态保存的问题。 我刚才将该函数看了一下,做了一个范例,如下。如果有兴趣的朋友,可原创 2009-08-09 08:06:00 · 1165 阅读 · 0 评论