Ads by Lake Quincy Media

eaglet

本博专注于基于微软技术的搜索相关技术
posts - 175, comments - 2978, trackbacks - 26, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

.NET

摘要: google maps 的 KML 文件可以用于静态的地图标注,在某些应用中,我们手上往往有成百上千个地址,我们需要把这些地址和描述批量标注到 google maps 上去,如果手工来做,太耗时间,在这里我写了一个程序批量来生成这个 KML 文件。阅读全文

posted @ 2011-12-05 12:59 eaglet 阅读(1549) | 评论 (1) 编辑 |

摘要: 性能测试的一些备忘阅读全文

posted @ 2011-07-07 12:57 eaglet 阅读(479) | 评论 (3) 编辑 |

摘要: 在嵌入式应用和一些安全软件中经常需要不通过物理键盘输入,虽然微软提供了也一个软键盘,但这个软件盘不能定制界面不能自动感应当前光标是否处于输入状态,所以有时候我们还是需要自己来实现这个软键盘。本文将讲解自己实现软键盘时涉及到的几个关键技术。阅读全文

posted @ 2011-05-20 06:28 eaglet 阅读(2621) | 评论 (15) 编辑 |

摘要: Vista 和 Windows 7 操作系统为了加强安全,增加了 UAC(用户账户控制) 的机制,如果 UAC 被打开,用户即使是以管理员权限登录,其应用程序默认情况下也无法对系统目录,系统注册表等可能影响系统运行的设置进行写操作。这个机制大大增强了系统的安全性,但对应用程序开发者来说,我们不能强迫用户去关闭UAC,但有时我们开发的应用程序又需要以 Administrator 的方式运行,即 Win7 中 以 as administrator 方式运行,那么我们怎么来实现这样的功能呢?阅读全文

posted @ 2011-04-22 08:34 eaglet 阅读(9098) | 评论 (18) 编辑 |

摘要: 本文大概研究了一下 SharpZipLib 的商业授权问题阅读全文

posted @ 2011-04-20 14:59 eaglet 阅读(531) | 评论 (1) 编辑 |

摘要: 如果你的程序希望在不同语言的操作系统上平滑移植,你必须要正确理解和设置区域性信息(CultureInfo),这个问题对于习惯了中文windows 操作系统的我们来说,往往非常容易忽略。一旦忽略这个问题,我们在中文windows操作系统下运行正常的程序跑在英文或者其他语言的操作系统上,比如台湾或香港版本的windows下,轻则显示不对,重则逻辑错误。下面就谈谈这个区域性信息对程序移植性的影响阅读全文

posted @ 2010-06-08 09:19 eaglet 阅读(1783) | 评论 (16) 编辑 |

摘要: 在一些特殊的应用中,我们需要对类或结构体对象实例的私有字段赋值,比如我们需要改变某个只读属性(Readonly Property)的值,本文将重点介绍如何来实现这样的功能。特别是对结构体私有字段赋值,我们需要用到一个未公开关键字 __makeref 才能够实现。阅读全文

posted @ 2010-05-26 10:38 eaglet 阅读(1017) | 评论 (0) 编辑 |

摘要: 昨天把我的 Hubble.net 项目在x64下测试发现有异常,但在32位操作系统下没有问题,抓狂!查了好几个小时最后发现居然是 LayoutKind.Explicit 的问题,网上搜索了半天,中英文的都看了,没找到为什么这个会造成.net 在不同平台上表现不一样,不管怎么样,我还是把这个问题写出来,大家看了以后可以避免犯同样的错误。阅读全文

posted @ 2010-02-23 08:59 eaglet 阅读(1405) | 评论 (4) 编辑 |

摘要: 2008 年我写过一篇博客叫 《让.Net 应用程序突破2G的内存访问限制》这篇博客主要讲述了如何在32位操作系统下利用AWE 扩展访问超过2G的内存。AWE方式虽然可以访问超过2G的内存,但其本身也有一些问题,首先必须要锁定内存,其次需要自己写内存管理程序来管理这些内存,.net framework 无法在AWE 扩展的内存中创建托管堆。其实很多应用只是想申请比2G稍多一些的内存,最简单的方法还是采用/3GB开关来实现。本文将讲述如何利用 /3GB开关来让32位操作系统下.net 应用程序申请超过2GB的内存。阅读全文

posted @ 2010-01-20 09:24 eaglet 阅读(2780) | 评论 (20) 编辑 |

摘要: 最近做了一个项目发现 Response.Redirect 后 Session 会丢失,搞了两天终于发现问题所在。阅读全文

posted @ 2009-11-10 07:42 eaglet 阅读(1296) | 评论 (9) 编辑 |

摘要: .Net 提供了一个NetworkStream 用于TCP 的读写,实际使用时发现直接操作效率很低,哪怕把TCP 的发送缓存和接受缓存设置很大也没有太大提高。后来在对 NetworkStream 读写前设置了缓存,性能一下子提高了很多。阅读全文

posted @ 2009-11-04 13:01 eaglet 阅读(4370) | 评论 (12) 编辑 |

摘要: WinForm 下我们可以调用MessageBox.Show 来显示一个消息对话框,提示用户确认等操作。在有些应用中我们需要通过程序来自动关闭这个消息对话框而不是由用户点击确认按钮来关闭。然而.Net framework 没有为我们提供自动关闭MessageBox 的方法,要实现这个功能,我们需要使用Window API 来完成。阅读全文

posted @ 2009-07-24 10:04 eaglet 阅读(4694) | 评论 (21) 编辑 |

摘要: 我们日常工作中经常会遇到将字符串转换为值类型的问题,比如"123" 转换为一个Int32类型,这个很简单,我们只要调用int.Parse 函数就可以实现。eaglet 今天要说的是,一些应用中往往在编码阶段无法知道字符串需要转换成的值类型的具体类型,而需要在运行时动态指定类型进行转换,遇到这种问题,我们如何解决?阅读全文

posted @ 2009-06-05 09:58 eaglet 阅读(2314) | 评论 (16) 编辑 |

摘要: 有人提出要用OO的思路来解决算法问题,OK,没问题,eaglet 今天就尝试用OO来实现算法。既然谈OO,我们就重点讨论设计,不重点讨论算法的效率了。阅读全文

posted @ 2009-06-03 17:18 eaglet 阅读(2172) | 评论 (52) 编辑 |

摘要: 这两天老赵和老包为IL 是不是汇编语言交了火,eaglet 忍不住也想说两句。阅读全文

posted @ 2009-06-02 10:24 eaglet 阅读(2603) | 评论 (44) 编辑 |

摘要: 昨天调试一段程序发现内存始终释放不掉,最后终于发现是对String 的错误使用造成,这促使我今天又仔细研究了一下String类型,不研究不知道,一研究发现我过去对String 的很多认识都是错误的,感觉这种错误认识还比较有典型性,于是写下此文和大家一起探讨。阅读全文

posted @ 2009-05-13 16:00 eaglet 阅读(3759) | 评论 (35) 编辑 |

摘要: .Net 下的程序调试相对C/C++要简单很多,少了那些令人头疼的指针越界的问题。不过当你的程序遇到如下问题时,依然非常棘手: 1. 进程异常终止。 2. 内存泄漏或者内存申请后程序始终没有释放。 3. 线程因未知原因挂起,比如死锁。 4. 程序死循环。 本文将阐述如果编写程序对后两者故障实时跟踪并报告。 阅读全文

posted @ 2009-03-12 13:00 eaglet 阅读(3559) | 评论 (2) 编辑 |

摘要: 昨天我在一篇博文中提到用 GetThreadTimes 这个Win32 API 来获取线程实际运行时间。今天我又深入研究了一下,发现这个API 返回的时间并不准确。阅读全文

posted @ 2009-03-11 15:57 eaglet 阅读(2787) | 评论 (15) 编辑 |

摘要: 早上看到老赵写的这个性能计数器,感觉很实用,不过老赵用了很多.C# 3.0 的新语法,还用了 VISTA 和 Server 2008 下特有的Win32 API,对于还在用C#2.0 或者还工作在 XP 或者 Server 2003 下的兄弟们,只能望代码心叹了。应老赵的要求,我修改了他的代码,增加了对低版本C# 和 低版本windows 操作系统的支持。 阅读全文

posted @ 2009-03-10 14:10 eaglet 阅读(7203) | 评论 (41) 编辑 |

摘要: 随着.Net技术的发展,.Net技术被逐渐应用到很多大型的应用软件项目中。这些项目的规模越来越大,很多项目中除了自己的代码外还引用了很多第三方的.net组件。同时很多项目又被应用到很多关键的部门,软件系统的稳定性越来越至关重要。由于.Net 框架提供了非常强大的异常处理机制,同时对一些非托管代码很难控制的系统问题比如指针越界,内存泄漏等提供了很好的解决方案。相比非托管代码构建的系统,.Net构建的系统更加稳定。不过这并不是说.Net构建的系统就完全无懈可击,很多由于代码的不严谨或者系统问题引发的故障将会导致.Net应用程序产生未捕获异常,从而导致应用程序异常终止。本文将对三种最常见的.Net应用的未捕获异常处理进行阐述。阅读全文

posted @ 2009-02-17 09:53 eaglet 阅读(7589) | 评论 (27) 编辑 |

摘要: 事件委托使用时内存泄漏的问题阅读全文

posted @ 2009-01-07 14:02 eaglet 阅读(406) | 评论 (3) 编辑 |

摘要: 在WinForm实现一个类似资源浏览器的功能,需要实现将WinForm中列出的文件拖出到其他应用程序中或者从其他应用程序中将文件拖入到 Winform应用中。网上有一些文章介绍这种功能,但都比较零散,缺少一个完整的例子。为此我编写了一个较完整的实现文件拖入和拖出的例子,并撰写此文一步步讲解如果实现类似功能。阅读全文

posted @ 2009-01-06 11:34 eaglet 阅读(3874) | 评论 (10) 编辑 |

posted @ 2008-12-10 19:27 eaglet 阅读(285) | 评论 (0) 编辑 |

摘要: 很多应用中,开发者需要自己构建一个浏览器,并且对通过这个浏览器提交的请求进行截获,比如用户通过这个浏览器浏览了一个网页,并向网站提交(POST) 了一些信息,我们想在其提交到网站前对这些POST数据在浏览器侧进行截获,做一些跟踪日志,或者对这些数据先加密或转换后再发送到服务器。.Net 提供的WebBrowser 控件可以让开发者很轻松的构建一个类似IE的浏览器,但这个控件提供的事件较少,一些高级应用单纯用这个控件提供的方法和事件无法实现。这篇文章我想介绍一下如何让 WebBrowser 控件可以截获自己POST出去的数据。阅读全文

posted @ 2008-11-19 07:45 eaglet 阅读(5845) | 评论 (14) 编辑 |

摘要: 32位Windows操作系统下单个进程的用户模式内存访问的限制是2G,如果在boot.ini中设置了/3G开关,则最大为3G,超过3G将无法访问。由于Hubble.net 项目是一个数据库系统,必须要考虑使用大内存缓存数据的问题,于是最近对这个问题进行了一些研究。其实这块的技术是现成的,32位操作系统下只有通过 AWE的方式来扩展内存。这块的文章也很多,但很少有.net 下如何使用的实例,我做了一个类似MemoryStream的封装,可以让.Net程序员轻松操作AWE内存,从而使其程序轻松突破2G内存的限制。阅读全文

posted @ 2008-11-06 14:00 eaglet 阅读(4368) | 评论 (17) 编辑 |

摘要: 做分词组件时,有网友提出采用Hashtable 数据结构查找字符串效率较低,建议改为Dictionary,其理由是采用Hashtable 时Key值是object 会触发装箱和拆箱动作,一直对这种说法表示怀疑,因为我理解只有值类型和引用类型通过object 互转时才会发生装箱和查询,引用类型之间强制转换不应发生装箱和拆箱,而Dictionary 泛型实际上底层还是调用的Hashtable,所以效率怎么会比Hashtable 要高呢?今天决定对比较常用的4种数据结构做一个测试,以便以后做系统性能优化时做一个参考。阅读全文

posted @ 2008-10-23 14:42 eaglet 阅读(4167) | 评论 (25) 编辑 |

摘要: 前几天看到一篇关于.net动态编译的文章 .NET中的动态编译 ,很受启发。在此基础上我做了一些封装,为使调用更加简单,并增加了对动态代码调试的支持,相同代码只编译一次的支持,代码改动自动重新编译,代码引用文件的自动加载和手工加载等功能。阅读全文

posted @ 2008-10-17 13:10 eaglet 阅读(5021) | 评论 (26) 编辑 |

摘要: 对于数据库的分页,目前比较传统的方法是采用分页存储过程,其实用 DataReader 也可以实现分页,不需要写存储过程,实现效率上也比几种比较流行的分页方法要略快。阅读全文

posted @ 2008-10-09 10:02 eaglet 阅读(3597) | 评论 (22) 编辑 |

摘要: 盘古分词开发了多元分词算法,其与lucene.net 配合构建全文搜索,经测试准确度接近google和baidu的水平。现将一些实现方法和测试结果公布出来,供关心分词和搜索技术的朋友们参考。阅读全文

posted @ 2008-10-02 16:34 eaglet 阅读(7295) | 评论 (26) 编辑 |

摘要: .Net framework提供了TreeView 控件,但该控件不支持三态的形式。所谓三态就是带CheckBox的TreeView每个Node都有三种状态,即选中,未选中和部分选中(指该Node的字节点并非全部选中)。阅读全文

posted @ 2008-09-26 11:46 eaglet 阅读(3601) | 评论 (10) 编辑 |

摘要: .net 框架号称永远不会发生内存泄漏,原因是其引入了内存回收的机制。但实际应用中,往往我们分配了对象但没有释放指向该对象的引用,导致对象永远无法释放。最常见的情况就是给对象添加了事件处理函数,但当不再使用该对象时却没有将该函数从对象的事件handler中减掉。另外如果分配了非托管内存,而没有手工释放,GC同样无能为力。所以当.net应用发生内存泄漏后如何跟踪应用的内存使用情况,定位到程序设计中的缺陷显得非常重要。本文将介绍通过.NET Memory Profiler来跟踪.net应用的内存泄漏,为定位.net应用内存问题提供一个解决途径。阅读全文

posted @ 2008-09-05 15:15 eaglet 阅读(8139) | 评论 (18) 编辑 |

摘要: 今天在博问中看到一个动物叫三声的设计模式讨论,觉得很有意思,抽空实现了一下,觉得有必要写下来,和大家一起探讨探讨。阅读全文

posted @ 2008-08-15 09:41 eaglet 阅读(2513) | 评论 (15) 编辑 |

摘要: 最近我的博客中有两位网友在使用 KTDictSeg 1.3 + lucene.net 2.0 + HighLight.net 2.0 是出现问题,高度怀疑是HighLight.net 2.0 版本的Bug, 今天腾出时间把几个组件的源码全部下下来,调试了一把,终于找到了这个Bug,下面把Bug的具体原因和修改后的源码发上来,供大家参考。另外哪位网友 知道如何向 lucene apache 组织 申报Bug,麻烦告知一声,以便我将这个Bug提交给该组织,让它的后续版本可以改进这个错误。阅读全文

posted @ 2008-07-09 09:22 eaglet 阅读(1986) | 评论 (11) 编辑 |

摘要: HighLight.net 是Lucene.net 带的一个开源高亮显示的组件,这个组件 2.0 版本以上的源码在网上很难找到,而这个组件
感觉又存在一些bug,遇到问题想调试一下,又没有源码,实在让人抓狂。
今天用最土的方法,一个一个文件下载,总是把这个版本的源码给凑齐了,编译了一下,没有问题,发上来,方便大家调试,
大家如果发现这里面有什么bug,还望多多分享。阅读全文

posted @ 2008-07-07 11:10 eaglet 阅读(2422) | 评论 (19) 编辑 |

摘要: 目前互联网上关于Lucene 及 Lucene.net 的文章很多,看了一些,感觉绝大部分还是偏向于应用,真正深入探讨其核心算法的文章不是太多,最近打算深入研究一下Lucene.net,把一些关键技术点的核心算法搞清楚。在开始做这个工作之前,先对目前互联网上可以利用的资源做个汇总,算是抛砖引玉吧,还望网友们多来补充,大家共同学习! 阅读全文

posted @ 2008-07-03 21:29 eaglet 阅读(3512) | 评论 (14) 编辑 |

摘要: 今天对 .net 2.0 的 System.Runtime.Remoting.Channels.Ipc 做了一个相同的测试,测试结果是每秒传输速度为 33MB。 由于底层技术都是一样的,我估计其比我这个例子(180MB每秒)慢的主要原因应该是在序列化上。另外今天对我这个例子进行了一些补充,增加了对流方式的支持,并做了一个通过流方式传输文件的例子。


阅读全文

posted @ 2008-06-13 13:43 eaglet 阅读(2062) | 评论 (9) 编辑 |

摘要: 用Remoting做进程间通讯,效率较低,于是做了一个采用管道技术进行进程间通讯的例子,在1.8G 双核计算机上每秒钟可以发送180M数据。阅读全文

posted @ 2008-06-12 15:40 eaglet 阅读(2556) | 评论 (21) 编辑 |

摘要: 最近做了一个采用FileMapping进行进程间通信的程序,目的是希望通过这个程序实现WebService和我写的其他服务之间
通信,实现安全隔离以及一些状态的跟踪、保持和管理。做好后,先用两个普通的Windows 进程测试了一下,一切OK,立
即将客户端移植到ASP.NET中,结果打开FileMapping失败,立即意识到是权限问题。阅读全文

posted @ 2008-05-14 14:35 eaglet 阅读(1231) | 评论 (4) 编辑 |

摘要: .Net 框架提供了两种List类型,一种是基于链表的LinkedList, 一种是基于数组的List。那么在实际应用中到底采用哪种List,如何取舍呢?本文对两种类型在队列,堆栈和简单插入三种简单算法中的效率进行了一个比较。阅读全文

posted @ 2008-05-08 15:53 eaglet 阅读(2277) | 评论 (6) 编辑 |

摘要: 最近在做KTDictSeg 的 1.3 版本,在这个版本中做了一个用Lucene.net 搜索新闻的例子,其中生成关键词摘要用了
highlighter.net-1.4.0版本,发现中文关键词摘要生成结果总是不对,但英文的结果是对的。没办法,只得把highlighter.net
的源码拿出来调了一遍,最终发现问题在TokenGroup类的IsDistinct函数上。
阅读全文

posted @ 2008-05-06 19:07 eaglet 阅读(1601) | 评论 (4) 编辑 |

摘要: V1.1.1 版本增加一个配置模式 RegistryKeyPattern,用于帮助调用者自动读写注册表配置。另外该版本将IConfigurationPattern 接口的parameter 参数类型有String改为Object,以便更加通用。阅读全文

posted @ 2008-05-06 14:52 eaglet 阅读(1675) | 评论 (3) 编辑 |

摘要: 该版本为一个补丁版本,修改一处Bug:
Ini 配置模式下,如果被配置的字段为非字符串类型字段,当该字段被配置为空字符串或无效字符时,[Key]属性设置的默认值无效。
阅读全文

posted @ 2008-04-09 18:23 eaglet 阅读(1610) | 评论 (9) 编辑 |

摘要: 在项目开发中经常要读写那些以各种格式存放的配置文件,每次为了读写这些文件都要编写一堆代码,非常麻烦。于是最近终于下定决心,写一个自动读写配置文件的组件,以便达到一劳永逸的效果。阅读全文

posted @ 2008-04-08 21:00 eaglet 阅读(6099) | 评论 (30) 编辑 |

摘要: 最近需要在Winform项目中实现一个走马灯的效果,一开始用了一些办法比如移动Label控件,效果总是不太好,移动文本时总有闪烁的现象。后来找了一个国外的开源控件,应用了一下,效果还不错。仔细阅读了一下代码,发现还有一些地方值得改进,现把代码以及改动说明贴出来,和大家分享。
阅读全文

posted @ 2008-04-03 12:02 eaglet 阅读(7409) | 评论 (8) 编辑 |

摘要: C# 调用外部进程的类,网上可以搜出很多来,为什么要再写一遍,实在是因为最近从网上拷贝了一个简单的例程用到项目中,运行有问题,后来研究了半天,才解决了这些问题。于是打算写这么一篇博文,一来说说调用一个外部进程这么简单的一件事究竟会有哪些问题,二来也希望我写的这个相对比较完整的类可以为软件开发的同道们节约一些脑细胞,以便集中优势兵力解决那些真正高深复杂的软件问题。阅读全文

posted @ 2008-03-31 20:03 eaglet 阅读(5743) | 评论 (5) 编辑 |

摘要: 安全证书登录组件SecUser,后简称SecUser是www.kaitoo.com开发的一款基于.Net的开放源码的安全证书登录组件,该组件可以帮助用户构建一个类似于银行的网上银行系统的基于证书验证的Web应用系统。该组件封装了证书的管理功能,验证功能,以及登录后Web应用系统的安全认证功能,为开发者提供一个方便易用且高度可扩展的安全证书系统支撑平台。阅读全文

posted @ 2007-08-11 15:29 eaglet 阅读(3715) | 评论 (28) 编辑 |

摘要: 最近在项目中使用CodeSmith + netTiers 生成数据访问层DAL,感觉效果很好,减少了大量的简单重复劳动。
不过在使用过程中发现CodeSmith提供的方法不能完全满足项目需要,主要体现在两个方面:
1、 Data.DataRepository.TableProvider.GetPaged方法无法输入带参数的条件,调用前必须进行SQL 拼
接,这样可能导致SQL 注入攻击。
2、 DataRepository.Provider.ExecuteDataSet 无法分页查询

为解决以上问题,我做了如下代码对生成的DAL进行了补充。这些代码可以在DAL外部使用,也可以修改netTiers
模板,内置到DAL中。阅读全文

posted @ 2007-07-26 16:18 eaglet 阅读(3345) | 评论 (12) 编辑 |

摘要: 在互联网上找了很久,始终没有找到完全通过程序创建自定义的证书的方法。后来想了一个折中办法,就是用程序调用 makecert.exe 先生成一个证书,证书的一些参数如Subject,有效期,序列号等可以通过参数传入,然后把生成的证书文件读到Rawdata中。通过上述方法得到的X509证书,只能获取其公钥信息,由于公钥私钥是成对出现的,如果我们要在程序中使用该证书来加解密,就必须要获取公钥对应的那个私钥。一样是在互联网上没有找到很好的解决办法,只能自己研究。目前总结出两种方法,给大家分享:阅读全文

posted @ 2007-07-11 20:41 eaglet 阅读(4618) | 评论 (16) 编辑 |

摘要: 一款轻量级的Web通讯组件,调用者只需调用一个函数就可以将桌面应用程序中需要通讯的对象发送到Web应用程序中,并可以从Web应用程序获得其响应的对象,如果调用者需要发送加密消息,该组件提供了发送加密消息的方法,同样是非常简单。阅读全文

posted @ 2007-07-09 11:42 eaglet 阅读(2729) | 评论 (14) 编辑 |

摘要: 这段时间通过研究目前在互联网上可以搜索到的中文分词算法,感觉很难找到既快又准的分词方法,通过几天时间的研究,我终于找到了一种快速且较准确的中文分词方法。现在回过头来想想,觉得其实问题并不很复杂,对于一般应用,我觉得这个算法应该基本够用了,当然目前没有一种方法可以达到100%的分词准确度,这个算法也是一样。对于实际应用往往需要在效率和准确度上做个折中,当然对技术的追求是无止境的,我也将继续努力,争取在后续版本中进一步提高准确度,并维持现有效率。 阅读全文

posted @ 2007-05-24 18:14 eaglet 阅读(16338) | 评论 (85) 编辑 |