改进梦想天空的[纯真数据库查询代码]

今天要改进一个小程序,要用qq的ip数据库查询ip归属。自己懒的写。随便到网上找了找。

见到了下面这篇文章。

纯真IP数据库查询(C#源代码)

试用了一下作者给的ipseeker类。(其实还有一个版本:用QQWry.Dat作数据源实现IP地址检索[C#源码提供] 今天不说,看来我们园子了人材众多啊。有兴趣你可以两个都载回去实验。)

作者梦想天空是用.net2.0写的,先进啊。我用的是.net1.1,结果把这个类弄进来一测试,就是当头一棒。

看下面。


改进梦想天空的[纯真数据库查询代码]_第1张图片

分析:查了一下sdk,估计是因为作者用了2.0的关系,在1.1中没有gbk这个编码名。
解决:既然是gbk,那么直接用重载换成gbk的编码页代码就应该ok了。
return System.Text.Encoding.GetEncoding(936).GetString(buf, 0, i);
结果:ok一切正常

可以正常显示结果,我本以为到这里就结束了。结果,不小心(-_-6)点了几下刷新。又黄了。看下面。
改进梦想天空的[纯真数据库查询代码]_第2张图片

图太大,没法传,所以截小了一点,后面的提示是:因为文件正被另一进程使用。
分析:当然是重要资源没释放了,这还用分析。
解决:我本想不动这个类,在自己的代码里解决。试了几次没有成功。无奈,只好翻看代码。一看不要紧。原来作者把实现Instance的部分(单件模式)给注释掉了,可能本身就没写好吧。然而又没有其他保护措施,不黄才怪。想了想,我做的这个小程序访问不会很大。不用Instance那么麻烦了。
直接继承了IDisposable。
public class IPSeeker : IDisposable
然后加上了dispose方法
 public void Dispose()
 {
  this.ipFile.Close();
 }
释放了这个导致出错的珍贵资源。
结果:解决了,不然来混什么啊。monkey test了一下,频繁刷新无误。

感觉:
本来应该没什么感觉,因为天天再处理类似的问题。不过还是希望提起各位大哥们的注意。毕竟我们写东西是给别人用的。

你可能感兴趣的:(数据库)