James and Toni are absolutely correct but have missed the obvious IMHO - your code has a deeper flaw and if you fixed this then disposing the objects is not required.
You should (where possible) use the SPWeb and SPSite objects from SPContext - they are already created for you by the SharePoint web part infrastructure and its more efficient to use these than create your own.
In your code you are actually already using one of them to get the current webs URL, but then creating your own site and web regardless - pretty inefficient and not necessary.
So instead of
Dim site As New SPSite(SPContext.Current.Web.Url)
Dim web As SPWeb = site.OpenWeb()
You should be using just
Dim web As SPWeb = SPContext.Current.Web
If you use SPSite/SPWeb from SPContext these rather than creating your own then you should NOT dispose of them (you didn't create them, so leave them alone)
See MSDN - Best Practices: Using Disposable Windows SharePoint Services Objects
SPContext objects are managed by the SharePoint framework and should not be explicitly disposed in your code. This is true also for the SPSite and SPWeb objects returned by SPContext.Site, SPContext.Current.Site, SPContext.Web, and SPContext.Current.Web.