Use StringSet where apropriate
store modification time and file size

and compare it first instead of reading file on each iteration