A couple of months back I bought the Steam Assassin's Creed pack which includes all of the Assassin's Creed games before Assasin's Creed 3. While I already had Assassin's Creed on the Xbox 360 it was still cheaper to buy all of them again on PC than to buy the rest individually.
Recently I found Assassin's Creed would hang for a few seconds at the Ubisoft logo and then again everytime game state changed, for example when I killed someone or Altair successfully hid from his attackers. At first it seemed to be a graphics card driver issue as the problem first appeared after an update to Nvidia driver version 306.97 both on my desktop and my new Nvidia based laptop.
At first I thought maybe some recent changes I'd made to my hardware/system configuration might be to blame so I tried lowering the graphics quality of the game. This made no change to the perfomance and seemed like a fairly illogical and unlikely problem given how well the game had been running before. I only tried it because it was the quickest and easiest fix to try.
Next I tried rolling back the drivers as this was my initial suspicion anyway. I did this to the two previous drivers both of which failed to resolve the issue so back to the latest drivers I went.
I took to the internet to find a possible solution. Several sites and forums suggested that Assassin's Creed was trying to login with the Ubisoft Montreal website to track my game stats and under the poor state/overly high load of the server the game was hanging as it waited for a response. This actually made sense to me as the first HP TX2000 I had had a similar problem where a broken default network driver would cause games to stutter. It also seems that the problem has occurred several times over the last few years for different people, presumably when a new game gets popular and the server(s) can't keep up with demand for the new games (AC3 has been out for a while now but is still being heavily advertised alongside its new expansion pack.)
Several pieces of advice were given including disconnecting the ethernet cable and running Steam in offline mode. This seemed like an extreme solution to perform for a SINGLE game and I was reluctant to try it so I decided to try blocking the connection in Windows Firewall and run Peerblock to see if it caught it as suspicious traffic. This actually fixed most of the problems with the game no longer freezing at every action point. The initial animated logo was still very jerky and the game would now freeze occasionally but for a much shorter period. Clearly this wasn't the answer but it was as step in the right direction.
Finally I came across one forum where someone posted and answer. Through checking his IP logs he found that the game was trying to contact one of several IP addresses which were causing the game to freeze. He had a pack of 3 IP addresses already blocked along with a fourth new one. I suspect that Windows Firewall had blocked the first three but hadn't been updated to include the obviously new fourth IP address.
The solution is to add these 4 IP addresses to your hosts file. To do this in Windows (Vista+), right click on Notepad and Run as Administrator. Next, navigate to C:/Windows/system32/drivers/etc/hosts. The hosts file is where you can customise what IP addresses point to where, it's useful for setting up things like testing servers for web development. Anyway, in the file add the following entries at the bottom
# Assassin's Creed Exceptions
216.98.48.53 127.0.0.1 216.98.48.28 127.0.0.1 216.98.48.57 127.0.0.1 216.98.48.133 127.0.0.1
127.0.0.1 is the special case IP address that means "this/your computer". What we've done is essentially tell Windows that when a request to one of these IP addresses is sent from a program, just send a response from itself. With no outside connection to the world the game no longer has to wait/block for ages waiting for response from an over subscribed/tired server.
Many thanks to Spiritless on this Steam forum post for the solution.