Every time I hibernate Windows 7 and then resume later on, the whole system seems fine for a while, then everything gets slow until the system takes about 10 seconds to load a webpage where it was load instantly before.
Look at the HDD LED on your system. I’ll bet that for a few minutes after resuming from hibernation, the HDD LED flashes furiously (or even goes solid).
This is normal. When Windows resumes from hibernation, it does not read the entire hibernation file (which could be a few gigabytes in size) into memory. Instead, it loads the parts that are crucial to getting up and running again (the kernel, the memory of drivers, services, active programs, etc.) and loads the rest in the background. This way, you can start working again right away instead of waiting for a minute or two.
Naturally this means that the system will be bogged down while Windows continues to load the rest of the system in the background. Of course it tries its best to be as responsive as possible, but not surprisingly, this is easier said than done. This is particularly true since since activity keeps forcing it to side-track from the background-load to prioritize something else, so for example, if you un-minimize a program, Windows has to try to stop loading whatever it was working on and quickly restore the memory for that other program, but it may have to finish the current operation before side-tracking.
I already tried sfc /scannow, it doesn't make any difference.
Because there’s nothing wrong with the drive.
Is there something that can be done to stop this from happening?
Aside from getting more memory and a faster drive (e.g., SSD), the best thing that you can do to improve post-hibernation performance is to exit as many programs and freeing up as much memory as possible before hibernating. Obviously this somewhat defeats the purpose of hibernation, but nothing is free, and if you want performance on this end, then you have to pay on that end, and vice versa.
As a bonus, if you reduce the number of running programs and used memory before hibernating, then you also get the benefit that Windows hibernates faster since it doesn’t have to save as much memory to disk.
Also, the MSDN article that Bob mentioned explains another reason why resuming is slow(er than hibernating):
Boot loader enhancements also provide similar improvements in hibernation resume times, mainly by streamlining the I/O paths used by Ntldr to read the hibernation image. The hibernation file is compressed as it is written, and for efficiency, the compression algorithm overlaps with the file I/O. However, when resuming from hibernation, Ntldr is using the BIOS to perform the I/O; therefore, it is not feasible to overlap the disk I/O reads with the decompression.
To optimize the hibernation process in Windows XP, several improvements have been implemented. The compression algorithm has been optimized to compress and decompress large blocks (64K) of data. In addition, the compression is overlapped with the disk write. As the current data block is being transferred to the disk, the next block of data is being compressed. Overlapping the compression with disk writes makes the compression time virtually free. Also, the hibernation file is written using IDE DMA instead of PIO mode. Most modern IDE controllers and disks achieve their best performance only in DMA mode.
In other words, the hibernation process occurs in Windows with all of the drivers and such loaded and ready so that Windows can access the hardware (i.e., the drives) at maximum speed. However when you resume, Windows is not loaded, so it is using the BIOS which only provides a basic level of service—if even that much—after all, the B in BIOS stands for
The situation for Windows 7 on EFI systems is a little better, but still essentially the same. It would be impossible for an EFI to have “drivers” for every possible hardware device, so even an EFI system cannot provide full access with maximum performance.
Therefore, resuming from hibernation will always be somewhat slow (at least the part that gets Windows up and running; the background loading of the remainder would be a little faster). In fact, the more memory you have installed, the longer it takes because there is more data that has to be read from the disk—hibernation is one of the only downsides to having more memory.