Use the FileSystemObject, a wrapper around the API. It runs almost instantaneously. It's installed if you've got Windows Script Host installed. Here's an example:
#!perl
use warnings;
use strict;
use Win32::OLE;
my $fs = Win32::OLE->CreateObject('Scripting.FileSystemObject');
my $d = $fs->GetDrive('c:');
print $d->{TotalSize}, " total\n";
print $d->{FreeSpace}, " free\n";
print $d->{AvailableSpace}, " available\n";
print $d->{TotalSize} - $d->{FreeSpace}, " used\n";
__END__
Output on my system:
4446814208 total
2482372608 free
2482372608 available
1964441600 used