Carlos Siestrup
Carlos Siestrup

Reputation: 1216

Dispose array of string in a loop

I have the following loop inside a function:

for(int i = 0; i < 46;i++){
    String[] arrStr = File.ReadAllLines(path+"File_"+i+".txt")
    List<String> output = new List<String>();
    for(j = 0;j< arrStr.Length;j++){
       //Do Something
        output.Add(someString);
    }
    File.WriteAllLines(path+"output_File_"+i+".txt",output.toArray());
    output.Clear();
}

Each txt file has about 20k lines.The function opens 46 of them and I need to run the function more than 1k times so I'm planning to leave the program running overnight,so far I didnt find any erros but since there is an 20k size String array being referenced at each interaction of the loop,i'm afraid that there might be some issue with trash memory being acumulated or something from the arrays in the past interactions. If there is such a risk,which method is best to dispose of the old array in this case? Also,is it memory safe to run 3 programs like this at the same time?

Upvotes: 0

Views: 372

Answers (2)

user1023602
user1023602

Reputation:

Sounds like you came from the C world :-)
C# garbage collection is fine, you will not have any problems with that.

I would be more worried about file-system errors.

Upvotes: 1

Marco Fatica
Marco Fatica

Reputation: 937

Use Streams with using this will handle the memory management for you:

for (int i = 0; i < 46; i++)
{
    using (StreamReader reader = new StreamReader(path))
    {
        using (StreamWriter writer = new StreamWriter(outputpath))
        {
            while(!reader.EndOfStream)
            {
                string line = reader.ReadLine();
                // do something with line
                writer.WriteLine(line);
            }
        }
    }
}

The Dispose methods of StreamReader and StreamWriter are automatically called when exiting the using block, freeing up any memory used. Using streams also ensures your entire file isn't in memory at once.

More info on MSDN - File Stream and I/O

Upvotes: 1

Related Questions