xingd.net

.net related techonology

导航

随笔分类 -  Framework

摘要:接着前一篇文章,Minesweeper: GDI+ 初步实现,本文在代码结构上做一些改进,不涉及新的功能。首先我们来看MineBoard类的Init方法:publicvoidInit(introws,intcolumns,intmines){if(rows<=0||columns<=0||mines>=columns*rows){thrownewArgumentException... 阅读全文

posted @ 2008-03-19 22:09 xingd 阅读(3191) 评论(0) 推荐(1) 编辑

摘要:Programming C# 3.0 Fifth Edition,O'REILLY 2008 出版,ISBN 978-0-596-52743-3。 这本书很详细的介绍了C# 3.0,建议跳过你手中介绍C# 1.0和C# 2.0的资料,直接学习C# 3.0。 C# 3.0 Cookbook Third Edition,O'REILLY 2008 出版,ISBN 978-0-596-51610-9 ... 阅读全文

posted @ 2008-02-18 16:41 xingd 阅读(1222) 评论(0) 推荐(0) 编辑

摘要:重复的内容就不再重复了,参考http://www.cnblogs.com/xingd/archive/2008/02/01/1061800.html。 除了实现忽略大小写外,其他方面的性能也做了一些改进,主要借助下面的类,StringSegement,实现了大小写无关的比较和GetHashCode,同时避免了Substring的调用。 public class StringSegment { ... 阅读全文

posted @ 2008-02-04 19:37 xingd 阅读(3825) 评论(21) 推荐(0) 编辑

摘要:再度改进,在脏字可能存在的情况下,例如出现了多个脏字前Length-1部分时,性能相比http://www.cnblogs.com/xingd/archive/2008/01/31/1060425.html中描述的又提升了300%~400%。 直接贴出全部代码了,通过新增的一个byte[char.MaxValue]和BitArray(char.MaxValue),减少了大量的Substring和... 阅读全文

posted @ 2008-02-01 20:40 xingd 阅读(13008) 评论(35) 推荐(2) 编辑

摘要:.NET 3.0其实只是PF, CF, WF和CardSpace组合在一起的一个扩展库,.NET 2.0的核心部分没有什么变化,也不对应新的Visual Studio。.NET 3.5依旧没有动到.NET 2.0的核心,其新增的核心组件是LINQ,为了实现LINQ,必须要在语言层面上进行改进,于是C#进化到了3.0版。 C#3.0依赖的是Visual Studio 2008,或者说是.NET 3... 阅读全文

posted @ 2008-02-01 12:05 xingd 阅读(2698) 评论(19) 推荐(0) 编辑

摘要:参见 http://www.cnblogs.com/xingd/archive/2008/01/23/1050443.html。 感谢sumtech的回复和讨论,原本的效率已经足够网站实用了,虽然也想到一些改进方法,但是一直懒得去做。sumtech通过邮件跟我讨论,我也终于抽了时间做了改进,改进后的算法效率比原先的算法提高了400%,也就是仅需要原来的1/5时间。 算法关键是将两个BitArr... 阅读全文

posted @ 2008-01-31 21:57 xingd 阅读(9165) 评论(27) 推荐(1) 编辑

摘要:我们网站的脏字字典中大概有600多个词,而且会发生变化,因此简单的在数据新增/修改的时候做一次脏字过滤是不够的。在网站从.NET 1.1到2.0改版的时候,对新版的测试发现旧的脏字过滤算法耗费的时间过长,需要做一些优化。 旧的算法是简单对每一个脏字调用一遍 string.replace,当然是用了StringBuilder。在cnblogs里发现了一篇讨论脏字过滤的blog http://www... 阅读全文

posted @ 2008-01-23 18:18 xingd 阅读(15685) 评论(37) 推荐(2) 编辑

摘要:原文见http://www.cnblogs.com/goody9807/archive/2006/09/12/502094.html,很多网站都转载了。 但在我这里测试的时候,RegEx要快一倍左右。但是还是不太满意,因为我们网站上脏字过滤用的相当多,对效率已经有了一些影响,经过一番思考后,自己做了一个算法。在自己的机器上测试了一下,使用原文中的脏字库,0x19c的字符串长度,1000次循环,文... 阅读全文

posted @ 2007-09-26 03:57 xingd 阅读(7427) 评论(31) 推荐(0) 编辑

摘要:很久没有写blog了,最近同时在忙极光商智和信产部网游平台两个产品,没什么空闲的时间了。 获取当前程序文件的路径也算是一个比较常见的需求,比如我有一个文件conn.xml位于.exe的同一目录,在运行时需要从中读取一些设置信息。 进程对象在.NET中表现为System.Diagnostics.Process类,通过调用Process.GetCurrentProcess()... 阅读全文

posted @ 2005-03-21 23:37 xingd 阅读(15733) 评论(11) 推荐(0) 编辑

摘要:今天想写一个小工具从一个文件中提取一些文本,代码如下: publicstaticvoidMain(string[]args) { StreamReadersr=newStreamReader(args[0],Encoding.Default,false,1); sr.BaseStream.Seek(0x00005298,SeekOrigin.Beg... 阅读全文

posted @ 2005-03-04 16:59 xingd 阅读(5353) 评论(1) 推荐(0) 编辑

摘要:原文见http://www.cnblogs.com/birdshome/archive/2005/02/25/108866.htmlbirdshome在原文中引用了我给他的一个测试代码,但那个测试代码原意只是为了说明在Derived类的Foo中调用base.Foo时,因为多态的关系,Derived的Bar会被调用,而Base类本身的接口设计是有问题的。“其实这确实是面向对象中的一个设计矛盾,等于平... 阅读全文

posted @ 2005-02-25 15:07 xingd 阅读(1806) 评论(2) 推荐(0) 编辑

摘要:本文中测试了将多个字符串用指定的分隔符连接的几种方式,测试代码如下: public static void Main(){ ArrayList al = new ArrayList(10); String[] strs = new string[]{"abcdefg", "gfdadfd", "adfasdf", "adfasdf", "adfaidf", "adfasdf", ... 阅读全文

posted @ 2005-02-05 12:12 xingd 阅读(4597) 评论(13) 推荐(2) 编辑

摘要:原文见http://www.cnblogs.com/birdshome/archive/2005/02/05/101075.html。 文中对String和StringBuilder的用法有一些偏差,首先,str = str.SubString(0, str.Length - 1)和str = str.SubString(1)的效率应该相差不大,String.SubString(int)... 阅读全文

posted @ 2005-02-05 01:55 xingd 阅读(6068) 评论(6) 推荐(0) 编辑

摘要:将Voucher[] vouchers进行序列化时,可以看到Assembly和Type的信息只生成了一次,但是如果在vouchers中包含派生自Voucher的类的实例,也就是说vouchers是一个多态数组的时候,又是什么情况呢。如果BinnaryFormatter保存的是静态类型,那么反序列化时就不能完整恢复对象了。另一方面,因为BinaryFormatter.Serialize方法的参数... 阅读全文

posted @ 2005-02-04 21:38 xingd 阅读(1359) 评论(0) 推荐(0) 编辑

摘要:在C#中,一切都是对象,所有的类都从System.Object派生。相对的,一切数组实例也都是对象,所有的数组类都在System.Array派生。而Array类是Serializable的,那么Voucher[]是否能够直接进行序列化呢,我们可以尝试另外一种序列化多个Voucher的方式,代码如下: publicvoidBatchSerialize(stringfilename... 阅读全文

posted @ 2005-02-04 00:57 xingd 阅读(1771) 评论(3) 推荐(0) 编辑

摘要:实际应用中,往往需要将Voucher批量保存到磁盘文件,然后发送到业务中心。可以将每个Voucher保存为一个文件,然后将多个文件顺序传输,但这并不是一种很好的方案。 BinnaryFormatter的Serialize方法需要传入一个Stream,这个Stream应当是可以持续写入的,因此将多个Voucher写入同一个stream中,应该是没有问题的。VoucherSerializer的... 阅读全文

posted @ 2005-02-02 03:01 xingd 阅读(1570) 评论(3) 推荐(0) 编辑

摘要:今天微软的一个Developer给我们做了三个讲座,其中谈到了C# 2.0中的新特性。因为我对C++中的Generic Programming比较熟,因此在他讲的时候就想到了几个问题。 C# 1.0中是不支持方法参数的默认值的,这只能通过overload来模拟支持。同样,C# 2.0的Generic class中,相信也不会提供模板参数的默认值的功能。而在C++中,提供模板参数默认值是非常... 阅读全文

posted @ 2005-02-02 02:41 xingd 阅读(3993) 评论(16) 推荐(0) 编辑

摘要:接下来,实现Voucher类的反序列化,代码如下: publicVoucherDeserialize(stringfilename) { BinaryFormatterformatter=newBinaryFormatter(); Vouchervoucher=null; FileStreamfs=newFileStream(fi... 阅读全文

posted @ 2005-02-01 22:11 xingd 阅读(1289) 评论(0) 推荐(0) 编辑

摘要:前几天写了一篇.NET序列化概述性的文章,有朋友说对技术的描述不够详细,因此准备写一系列文章,以一个实例为基础,详细描述各种序列化的使用方法和注意事项。这一系列文章是为不熟悉序列化的读者准备的,已用过序列化的可以只看一下每篇中加粗的一句话,感兴趣再阅读全文。文中的示例类Voucher和VoucherItem非常简化,实际中的凭证包含更多的信息。 财务系统中经常要与凭证打交道,在这篇文章里... 阅读全文

posted @ 2005-01-29 21:29 xingd 阅读(3305) 评论(3) 推荐(0) 编辑

摘要:ildasm /adv assembly.dll 添加/adv参数后,菜单中会多出几项,适用于.NET Framework 1.0 and 1.1。2.0下好像所有的菜单都直接显示出来了。 帮助文件和ildasm /?中都没有给出adv参数的描述。 阅读全文

posted @ 2005-01-28 19:20 xingd 阅读(2293) 评论(8) 推荐(0) 编辑