讀取純真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ǔ)改編而來。我為什么要改編這個組件呢?因為我看到這個組件在使用過程中,每次都要打開文件流,并且整個接口使用靜態(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)文章
在IIS上部署ASP.NET Core Web API的方法步驟
這篇文章主要介紹了在IIS上部署ASP.NET Core Web API的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08HttpRequest Get和Post調(diào)用其他頁面的方法
HttpRequest Get和Post調(diào)用其他頁面的方法,需要的朋友可以參考一下2013-03-03asp.net Page.EnableEventValidation 屬性驗證服務(wù)器控件的回發(fā)和回調(diào)事件出現(xiàn)的錯誤
Page.EnableEventValidation 屬性驗證服務(wù)器控件的回發(fā)和回調(diào)事件出現(xiàn)的錯誤前兩天用jQuery做了一個包含DropDownList聯(lián)動的頁面,數(shù)據(jù)通過Ajax請求得到的。2010-10-10異步調(diào)用webservice返回responseXML為空的問題解決方法
異步調(diào)用webservice返回responseXML為空,詳細(xì)很多朋友都遇到過類似的問題吧,接下來為大家提供詳細(xì)的解決方案,感興趣的朋友可以參考下哈2013-04-04解析GridView自帶分頁及與DropDownList結(jié)合使用
本文主要介紹了GridView自帶的分頁功能的實現(xiàn)方法。具有一定的參考價值,需要的朋友一起來看下吧2016-12-12Asp.Net?Core7?preview4限流中間件新特性詳解
這篇文章主要為大家介紹了Asp.Net?Core7?preview4限流中間件的新特性示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05asp.net 合并GridView中某列相同信息的行(單元格)
合并GridView中某列相同信息的行(單元格)2009-11-11