我有一个很大的TXT(ipaddress.txt)有很多线的搜索字符串,每一行是一个IP地址,例如:德尔福:在TStringList中
44.XXX.XXX.XXX
45.XXX.XXX.XXX
46.XXX.XXX.XXX
47.XXX.XXX.XXX
48.XXX.XXX.XXX
我在TStringList
加载这个名单如:
FIpAddressList := TStringList.Create();
FIpAddressList.Sorted := true;
FIpAddressList.LoadFromFile('ipaddress.txt');
,我想检查一个IP地址在列表中,如:
function IsIPinList(const IPAddress : string): Boolean;
begin
Result := (FIpAddressList.IndexOf(IPAddress) <> -1);
end;
它的作品...但与拥抱慢e TStringList
。
有什么办法让这个过程更快?
UPDATE
- 列表是静态的,其中每月更新,以较少或更多5'000线。
- 该函数在服务器上的每个请求上被调用(例如,每秒5次)。
该列表仅在服务器服务启动时加载。使这个快速
有许多方法可以完成你想要的功能:通过数据库,二叉树,散列表等等。它取决于你的列表有多大,如果它发生变化,你的应用程序和环境的限制。 – RBA
你可以使用 - 例如 - http://www.soft-gems.net/index.php/controls/virtual-treeview这是非常快的。 – RBA
尝试排序并尝试二进制搜索算法后 – am2