I've been visiting Canada for about ten or eleven years and have tried various methods. I think I finally have it right.
1. Use a credit card that does not charge an international exchange fee. I have two CCs and a debit card. In Canada, I use Capital 1.
2. With Capital 1, I have an "alert" for international transactions. I will get an email within minutes of the transaction with the exchange already calculated. For instance, I bought diesel, paid $300.00 Canadian, came to $290.20 US.
3. Intend to use the ATMs. Haven't used one yet, so I don't know what kind of transaction fees there may be.
I used my debit card previously, and, whereas in the States, the transaction was posted to my bank almost immediately, transactions in Canada usually took days or weeks to clear.
For several years, we would bring several thousand US dollars with us, then find a bank to exchange it into Canadian. That could be a hassle - some banks had a limit on how much they would exchange, some charged a fee.
Won't know for sure until I try the ATMs, but I may finally have it right.
GM