Zapisywanie do pliku xml przy każdym przejściu na inną (pod)stronę spowoduje narzut (trochę bez sensu imo, chyba że trzymałbyś ten plik ciągle otwarty ale wtedy np. dla dwóch instancji aplikacji coś mogłoby się popieprzyć) dlatego proponuje to robić przy zakończeniu działania programu (np. w tle, formy już nie widać, ale historia się zapisuje).
Obiekt History (historia) tworzysz raz, nie kilka razy - to lista obiektów VisitedPage, którą rozwijasz jak chcesz (ja dałem listę dat, tzn kiedy ktoś wchodził na ten link i sam URL).
VisitedPage tworzysz za każdym razem jak wejdziesz na podstronę - tworzysz i dodajesz do Listy, lub (jesli sprawdzisz że już taki link jest w historii) po prostu dodajesz datę do tego już istniejącego obiektu (tak jest w moim kodzie) w Liście.
Przy zakończeniu działania programu iterujesz po wypełnionej odpowiednio liście History i każdy element nadpisujesz do XMLa (nie wiem czy dałoby się zapisywać cały obiekt listy, dlatego tak to napisałem). Nadpisujesz, ponieważ nie chcesz skasować historii poprzedniej - do tego może służyć jakaś inna funkcja.
Nie dałem Ci żadnego pliku, więc nie wiem o co chodzi - jeśli chodzi o link który podałem (XML Serialization (...)) to napisali tam jasno:
Let us look through the code carefully. First we create an instance of the MemoryStream class since we intend to keep the XML string in memory instead of saving it to a file.
Zatem co zrobić żeby zapisać do pliku? : P może FileStream zamiast MemoryStream, albo z MemoryStream do FileStream?