讀取純真IP數(shù)據(jù)庫的公用組件接口QQWry.NET
更新時間:2013年06月24日 10:52:30 作者:
這是一個讀取純真IP數(shù)據(jù)庫的公用組件接口,我是通過luma的《純真IP數(shù)據(jù)庫格式詳解》了解了純真IP數(shù)據(jù)庫數(shù)據(jù)格式,并且基于網(wǎng)絡(luò)上的一個IPLocation.dll源碼的基礎(chǔ)改編而來
這是一個讀取純真IP數(shù)據(jù)庫的公用組件接口,我是通過luma的《純真IP數(shù)據(jù)庫格式詳解》了解了純真IP數(shù)據(jù)庫數(shù)據(jù)格式,并且基于網(wǎng)絡(luò)上的一個IPLocation.dll源碼的基礎(chǔ)改編而來。我為什么要改編這個組件呢?因?yàn)槲铱吹竭@個組件在使用過程中,每次都要打開文件流,并且整個接口使用靜態(tài)的屬性。并不適合Web環(huán)境下,多線程并發(fā)查詢的需求,并且在性能上也不是最優(yōu)。有了luma的格式詳解,和現(xiàn)有的IPLocation.dll的源碼,使我的工作變得異常的簡單。出現(xiàn)的一個小錯誤,也是經(jīng)過一次調(diào)試后就解決了。性能較IPLocation.dll也有較大的提高,雖然只有短短的幾百行代碼,雖然網(wǎng)上也有很多類似的代碼,但繼承我一貫的做法,我仍然把這個組件開源貢獻(xiàn)出來。下面是一些接口使用的介紹:
QQWry.NET.QQWryLocator qqWry = new QQWry.NET.QQWryLocator("qqwry.dat");//初始化數(shù)據(jù)庫文件,并獲得IP記錄數(shù),通過Count可以獲得
QQWry.NET.IPLocation ip = qqWry.Query("120.67.217.7"); //查詢一個IP地址
Console.WriteLine("{0} {1} {2}", ip.IP, ip.Country, ip.Local);
以下是與IPLocation.dll在性能上的對比代碼:
Stopwatch stopwatch = new Stopwatch();
List<string> ips = new List<string> { "218.5.3.128", "120.67.217.7", "125.78.67.175", "220.250.64.23", "218.5.3.128", "120.67.217.7", "125.78.67.175", "220.250.64.23" };
stopwatch.Start();
for (int i = 0; i < 100; i++)
{
foreach (string item in ips)
{
ip = qqWry.Query(item);
// Console.WriteLine("{0} {1} {2}", ip.IP, ip.Country, ip.Local);
}
}
stopwatch.Stop();
Console.WriteLine("QQWryLocator 花了{(lán)0} ms", stopwatch.ElapsedMilliseconds);
stopwatch.Reset();
stopwatch.Start();
for (int i = 0; i < 100; i++)
{
foreach (string item in ips)
{
string s = IPLocation.IPLocation.IPLocate("qqwry.dat", item);
// Console.WriteLine(s);
}
}
stopwatch.Stop();
Console.WriteLine("IPLocation 花了{(lán)0} ms", stopwatch.ElapsedMilliseconds);
性能比較結(jié)果:
源碼和示例下載
復(fù)制代碼 代碼如下:
QQWry.NET.QQWryLocator qqWry = new QQWry.NET.QQWryLocator("qqwry.dat");//初始化數(shù)據(jù)庫文件,并獲得IP記錄數(shù),通過Count可以獲得
QQWry.NET.IPLocation ip = qqWry.Query("120.67.217.7"); //查詢一個IP地址
Console.WriteLine("{0} {1} {2}", ip.IP, ip.Country, ip.Local);
以下是與IPLocation.dll在性能上的對比代碼:
復(fù)制代碼 代碼如下:
Stopwatch stopwatch = new Stopwatch();
List<string> ips = new List<string> { "218.5.3.128", "120.67.217.7", "125.78.67.175", "220.250.64.23", "218.5.3.128", "120.67.217.7", "125.78.67.175", "220.250.64.23" };
stopwatch.Start();
for (int i = 0; i < 100; i++)
{
foreach (string item in ips)
{
ip = qqWry.Query(item);
// Console.WriteLine("{0} {1} {2}", ip.IP, ip.Country, ip.Local);
}
}
stopwatch.Stop();
Console.WriteLine("QQWryLocator 花了{(lán)0} ms", stopwatch.ElapsedMilliseconds);
stopwatch.Reset();
stopwatch.Start();
for (int i = 0; i < 100; i++)
{
foreach (string item in ips)
{
string s = IPLocation.IPLocation.IPLocate("qqwry.dat", item);
// Console.WriteLine(s);
}
}
stopwatch.Stop();
Console.WriteLine("IPLocation 花了{(lán)0} ms", stopwatch.ElapsedMilliseconds);
性能比較結(jié)果:
源碼和示例下載
相關(guān)文章
關(guān)于ASP.NET頁面打印技術(shù)的常用方法總結(jié)
B/S結(jié)構(gòu)導(dǎo)致了Web應(yīng)用程序中打印的特殊性;程序運(yùn)行在瀏覽器中,打印機(jī)在本地,而文件確可能在服務(wù)器上,導(dǎo)致了打印控制不是很靈活,接下來介紹幾種常見的打印技術(shù),感興趣的朋友可以了解下2013-01-01
ASP.NET MVC3網(wǎng)站創(chuàng)建與發(fā)布(1)
這篇文章主要介紹了ASP.NET MVC3網(wǎng)站創(chuàng)建與發(fā)布,根據(jù)文章內(nèi)容大家可以實(shí)現(xiàn)發(fā)布網(wǎng)站,感興趣的小伙伴們可以參考一下2015-08-08
asp.net 臨時數(shù)據(jù)保存實(shí)現(xiàn)代碼
在一個程序運(yùn)行的時候往往我們會回到上一個頁面,或者我們會需要當(dāng)時留在這個頁面的臨時數(shù)據(jù),例如,我們用百度搜索“腳本”之后我們會看到很多那啥我就不再說了啊!然后我們返回本來頁面在文本框內(nèi)會有“腳本”的字樣,我們一下代碼段就是實(shí)現(xiàn)這個功能2012-04-04
基于.NET Core 3.1 網(wǎng)站開發(fā)和部署的方法
這篇文章主要介紹了基于.NET Core 3.1 網(wǎng)站開發(fā)和部署的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
asp.net Repeater取得CheckBox選中的某行某個值
Repeater取得CheckBox選中的某行某個值的實(shí)現(xiàn)代碼2008-07-07
ADO.NET實(shí)現(xiàn)對SQL Server數(shù)據(jù)庫的增刪改查示例
本篇文章主要介紹了ADO.NET實(shí)現(xiàn)對SQL Server數(shù)據(jù)庫的增刪改查示例,非常具有實(shí)用價值,需要的朋友可以參考下。2017-01-01

