08 2012 档案

摘要:.net提供了List对象来提供可扩容数据存储,但在使用的过程中相信很多人直接通过默认构造函数进行创建。但这样做会存在一定的风险导致Lis在扩容过程增加CPU的损耗和GC的压力,对于问题的严重性就取决于实际应用的场合,如果在高并发的应用下存在大量这操作那问题就变得严重多了。 首先需要了解一下List的存储机制,在初始化的时候不指定大小的情况是默认分配大小为4的数组,当在添加信息超过该值的情况会进行一个倍分扩容,默认的规则是4,8,16,32...;扩展容的过程中是会构建扩展后大小的数组,并把旧的数据复制过去。ArrayList和List<T>实际的代码大概如下:public vi. 阅读全文
posted @ 2012-08-29 13:14 beetlex 阅读(3864) 评论(6) 推荐(3)
摘要:组件支持属性转换描述,主要用于对象属性值和数据存储之前的转换,如常见的枚举和数值,枚举和字符,用户密码等信息转换存储。实际上也可以扩展更灵活的转换如对象关联字段转换,对象序列化转等等。 在Smark.Data描述一个转换器是一件很简单的事情,只需要继承PropertyCastAttribute对象并重写两个方法即可,以下是一个简单的枚举和数值的数值转换 public class EnumToInt : PropertyCastAttribute { public override object ToColumn(object value, Type pt... 阅读全文
posted @ 2012-08-28 17:11 beetlex 阅读(1224) 评论(2) 推荐(1)
摘要:如果不是编写网络通讯应用相信对连接池接触比较少,其实我们是经常用到的特别是使用ado.net访问数据库的时候,默认情况就开启了连接池功能.连接池的主要功能是对N个连接循还复用,而不是每次使用都创建一个次的连接,通过减少连接创建达到一个更好性能的网络吞吐处理. 在ado.net使用的连接池都是针对一台服务器,但在有些情况下应用相对比较复杂,逻辑分布在几台服务器上,而WEB分布调用这几个逻辑服务器应用.以上这情况如果连接池只针对单一服务器的情况,这时候web维护不同服务器的连接池就变得比较麻烦多了;如节点轮循调用,如果一个节点有异常,还要放弃异常节点轮循;服务器恢复正常后还要把节点归队等一系... 阅读全文
posted @ 2012-08-22 21:19 beetlex 阅读(1874) 评论(1) 推荐(0)
摘要:在数据设计的时候会针对一些字段设置默认的值,Smark.Data同样支持这样的功能,组件通过在属性中描述一个Value属性来告诉组件这个值如果在没有设置的情况应该提供怎样的值。组件提供一个描述的基类,用户可以根据实际情况的需要扩展出具体的默认值描述,以下是值描述基础类: [AttributeUsage(AttributeTargets.Property)] public abstract class ValueAttribute:Attribute { public ValueAttribute(bool afterupdate) { ... 阅读全文
posted @ 2012-08-18 14:21 beetlex 阅读(1629) 评论(0) 推荐(1)
摘要:使用Smark.Data进行数据查询时必须通过对象来描述,其主要描述信息包括查询来源于那些表和需要那些信息等,即使平常的最常面对的关联查询,数据汇总查询等都可以通过实体描述来完成.因此实体描述在组件中起到一个非常重要的作用,可以说所有数据处理都必须经过实体描述.以下是简单地介绍Smark.Data的实体描述能完成那些数据查询工作. [Table] interface ICustomers { [ID] [IDENTITY] string CustomerID { get; set; } [Column] ... 阅读全文
posted @ 2012-08-12 23:46 beetlex 阅读(1809) 评论(0) 推荐(0)
摘要:Expression对象是Smark.Data的核心对象,虽然Expression是个条件对象,但它所具备的功能是你想象不到的:),以下把Expression的功能列出来。 public RESULT Avg<RESULT, Entity>(string field) where Entity : Smark.Data.Mappings.DataObject; public RESULT Avg<RESULT, Entity>(string field, bool DISTINCT) where Entity : Smark.Data.Mappings.Data... 阅读全文
posted @ 2012-08-09 20:28 beetlex 阅读(2177) 评论(5) 推荐(1)
摘要:Ant是基于Beetle实现开源的自动更新工具,主要包括三大部分:网络文件服务,文件更新管理和客户端更新组件.网络文件服务服务端主要用于文件管理,包括文件上传和下载。服务在开启的时候必须生成rsa证书,主要是用于管理端更新文件时进行一个有效性验证.文件更新管理文件管理端是用于管理更新的文件,必须把服务端生成的private key放到管理端目录下才能有效验证.Ant的更新允许目录结构更新,所以Client更新的时候如果本地没有相关目录结构文件时会自动根据需要进行创建。Ant的文件更新也没有采用版本号作为更新标记,只要管理端更新了对应的文件就会生成一个新的GUID值,Client在更新的时候比. 阅读全文
posted @ 2012-08-08 22:28 beetlex 阅读(4795) 评论(23) 推荐(7)
摘要:在实际开发应用中,非UI线程操作UI是普遍存在的,在.net下一般是通过Control.Invoke的方法来进行操作,但到处都是Control.Invoke代码维护可是一件麻烦的事情。以下通过接口和队列来规范非UI线程操UI的实现。 既然要规范处理那接口是个不错的选择,以下定义一个简单的执行接口public interface IInvokeItem { void Execute(); } 以下是扩展一个简单的操作类封装class ControlInvoke<CONTROL,DATA> : IInvokeItem { public Contro... 阅读全文
posted @ 2012-08-06 12:33 beetlex 阅读(2457) 评论(7) 推荐(2)