关于数据筛选的一个难题。已经初步实现,希望能够提高效率。
最近在编写一个关于代理精简的软件,通过两个DO实现了,可是效率太低。具体是这样!
被精简数据形式(存放在txt文本中):
204.13.69.62:1080
206.57.92.105:47800
208.107.66.223:19985
208.9.62.65:8000
这里面大概有5千行
源判断数据:
"33996344 ", "33996351 ", "英国 "
"50331648 ", "68257567 ", "美国 "
"68257568 ", "68257599 ", "加拿大 "
"68257600 ", "68296775 ", "美国 "
"68296776 ", "68296783 ", "墨西哥 "
"68296784 ", "68637311 ", "美国 "
"68637312 ", "68637375 ", "加拿大 "
"68637376 ", "69533951 ", "美国 "
"69533952 ", "69534207 ", "加拿大 "
"69534208 ", "69915111 ", "美国 "
"69915112 ", "69915119 ", "加拿大 "
"69915120 ", "83886079 ", "美国 "
"94585424 ", "94585439 ", "瑞典 "
"100663296 ", "121195295 ", "美国 "
这个文本里面大概有6.6万行数据。
被精简数据中的IP是通过以下数学式转化的:
假设一个IP=24.24.24.24,那么
404232216 = 16777216*24 + 65536*24 + 256*24 + 24
然后用以上这个数据去判断是否在源判断数据每一行的两个数据之间,如果在,那么就将此IP连同国家保存到另一个文本!
现在的情况就是效率太低了,整个5千行数据循环完至少需要10分钟的时间,请问有没有什么更好的办法来提高这个软件的运行效率?
[解决办法]
不懂,顶
[解决办法]
尽管没太看懂,不过还是建议你用文本数据库的方式访问文本文件
[解决办法]
你按照暴大侠的方法去做
把你的“源判断数据”当做一数据库文件(ADO可以直接连接文本文件)
连接方法如:Cn.ConnectionString = "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=F:\;Extensions=asc,csv,tab,txt; "格式。
记得要给你的“源判断数据”加上一字段名称,这样好下SQL语句些
[解决办法]
源判断数据:
"33996344 ", "33996351 ", "英国 "
"50331648 ", "68257567 ", "美国 "
"68257568 ", "68257599 ", "加拿大 "
"68257600 ", "68296775 ", "美国 "
"68296776 ", "68296783 ", "墨西哥 "
"68296784 ", "68637311 ", "美国 "
"68637312 ", "68637375 ", "加拿大 "
"68637376 ", "69533951 ", "美国 "
"69533952 ", "69534207 ", "加拿大 "
"69534208 ", "69915111 ", "美国 "
"69915112 ", "69915119 ", "加拿大 "
"69915120 ", "83886079 ", "美国 "
"94585424 ", "94585439 ", "瑞典 "
"100663296 ", "121195295 ", "美国 "
把这些数据整理成固定的格式后排序保存到文件,然后以random方式打开它。计算出一个IP后,通过二分查找法在源数据里面查找对应的国家,肯定比逐个比较要快N多。