Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does copying objects reduce the performance?

Tags:

c#

First of all, I don't know if this is called "copying" an object, so the question title may be wrong. What I have is a custom class called File which has inside a bunch of lists (1000+ numbers in 5-6 lists) and some other properties. I have all my files in a List to be able to access them (LoadedFiles).

My question is: if I'm writing a method and I don't want to write:

DoSomeOperation(LoadedFiles[2]);

but instead:

File file2 = new File();
file2 = LoadedFiles[2];

DoSomeOperation(file2);

Is this a bad practice? Or the compiler is clever enough to know that it's the same object and access it directly from the original list (LoadedFiles).

like image 371
Sturm Avatar asked Dec 21 '22 02:12

Sturm


1 Answers

Actually your class is a reference type which means that the line file2 = LoadedFiles[2] will only copy a reference pointer to the object that was created, you're not copying the contents of the object into a new object.

So as far as performance is concerned you a creating a new instance of a file:

 File file2 = new File();

Then you're immediately switching the reference to a different object

file2 = LoadedFiles[2];

Thus releasing the reference to the object you had just created. This will cause needless garbage collection to occur. It's better to just do File file2 = LoadedFiles[2] if it makes a difference to you stylistically.

Best place to look into reference types vs value types is the C# Language specification http://www.microsoft.com/en-us/download/details.aspx?id=7029 on page 77.

like image 75
nerdybeardo Avatar answered Dec 31 '22 21:12

nerdybeardo