what is the difference between finally and dispose methods?
Answer Posted / monika
The important difference is timing. Finalize is called
after the .NET garbage collector runs. That can take a
while, depending on how frequently you allocate memory and
in what generation the object lives. Dispose() is the
standardized way to free up the unmanaged resources your
object uses well before the finalizer gets a chance to do
so. A Bitmap would be a good example, it takes very few
managed resources but can eat a huge chunk of unmanaged
memory, depending on the size of the bitmap. If you don't
call Dispose on it after you're done using it, your app can
potentially consume large amounts of unused memory for an
extended amount of time.
While Finalize is called automatically, Dispose() isn't.
You must call it explicitly or you can use the V2.0 "using"
statement in VB.NET or C#. Or the "stack allocation"
syntax in C++/CLI. Using "using" is preferred, it ensures
Dispose() is called, even if there's an exception. When
Dispose() runs, you won't need the finalizer anymore so
call GC.SuppressFinalize(). That makes the finalizer
thread running a lot leaner too.
You don't have to implement Dispose() if your class doesn't
consume unmanaged resources. If it has a member that
implements Dispose(), you'll need to implement Dispose()
too so you can call that member's Dispose() method.
| Is This Answer Correct ? | 53 Yes | 2 No |
Post New Answer View All Answers
if a method is marked as protected internal who can access it?
What is the process of delegation?
What is entity framework in c#?
What is a event in c#?
What is the difference between mobile application and desktop application?
What is default parameter in c#?
What do you mean by thread safe in c#?
What does return do in unity?
what is partial assembly reference
Write one code example for compile time binding and one for run time binding? What is early/late binding?
What is the difference between class and namespace?
What are nested classes in c#?
What is a Assembly?
How can you achieve run time polymorphism in C#?
What is the syntax for calling an overloaded constructor within a constructor (this() and constructorname() does not compile)?