I have encountered similar behaviour when iterating over rather large directory tree over network, and I believe this *might* help a bit... Although it is hard to say, if your problem is the same, as mine was.
sub Get_FileList{
@files=();
@todel=();
####### WORKAROUND START
my $sloppy = ${^WIN32_SLOPPY_STAT};
${^WIN32_SLOPPY_STAT} = 1;
####### WORKAROUND END
find(sub {push @files,$File::Find::name if (-f $File::Find::name a
+nd /\.*$/ and stat($File::Find::name)->mtime > $lastepoch);}, $indir)
+;
find(sub {push @todel,$File::Find::name if (-d $File::Find::name);
+ }, $indir);
$lastepoch = time; #Update last execution time for the next run
$logger->info("New execution time update: $lastepoch.");
$proccount = scalar(@files);
$logger->info("Found $proccount new files since last run.");
####### REVERT WORKAROUND
${^WIN32_SLOPPY_STAT} = $sloppy;
####### REVERT WORKAROUND END
}
See
${^WIN32_SLOPPY_STAT}