我正在处理纽约市 MTA 地铁系统的 GTFS 数据。我需要在特定站点找到每条路线的停止时间。为此,我从我拥有的 StopTimes DataTable 中获取特定 stop_id 的停止时间。我只想要现在和接下来 2 小时之间的停止时间。
然后,我需要使用 trip_id 值查找每个停止时间的行程。从那次旅行开始,我必须使用 route_id 值查找路线,以便获取路线名称或停靠时间的编号。
以下是每个 DataTable 的计数:StopTimes(522712)、Trips(19092)、Routes(27)。
现在,这需要 20 秒到 40 秒的时间来执行。我怎样才能加快速度?任何和所有的建议表示赞赏。谢谢!
foreach (var r in StopTimes.OrderBy(z => z.Field<DateTime>("departure_time").TimeOfDay)
.Where(z => z.Field<string>("stop_id") == stopID &&
z["departure_time"].ToString() != "" &&
z.Field<DateTime>("departure_time").TimeOfDay >= DateTime.UtcNow.AddHours(-5).TimeOfDay &&
z.Field<DateTime>("departure_time").TimeOfDay <= DateTime.UtcNow.AddHours(-5).AddHours(2).TimeOfDay))
{
var trip = (from z in Trips
where z.Field<string>("trip_id") == r.Field<string>("trip_id") &&
z["route_id"].ToString() != ""
select z).Single();
var route = (from z in Routes
where z.Field<string>("route_id") == trip.Field<string>("route_id")
select z).Single();
// do stuff (not time-consuming)
}