You allocate huge size for string when you use:
string strFile42 = File.ReadAllText(filename);
and doing Regex.Replace on all that huge size at a time represent overhead on memory.
Strings are allocated on the large object heap, which are not collected by GC with other small objects.
When you call GC.Collect() to revoke garbage collector, GC CANNOT guarantee the string will be collected immediately.
So, it is best to use BufferedStream with StreamReader and handle one line at a time ,without any overhead on memory.
I measured memory used within execution to monitor memory allocation.
The following class can handle huge size of file without any problems
public void FileProcess()
{
Process proc = Process.GetCurrentProcess();
int i = 0;
while (i < 40)
{
Console.WriteLine(" i: {0} - Private memory: {1} KB- Memory Used: {2} KB", i,
proc.PrivateMemorySize64/1024.0, GC.GetTotalMemory(true)/1024.0);
var path = "test0.txt";
var path2 = "test2.txt";
using (FileStream fs = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read))
using (BufferedStream bs = new BufferedStream(fs))
using (StreamReader sr = new StreamReader(bs))
using (StreamWriter outputFile = new StreamWriter(path2))
{
string line;
while ((line = sr.ReadLine()) != null)
{
var text = ProcessLine(line, i);
outputFile.WriteLine(text);
}
}
i++;
// Collect all generations of memory.
// GC.Collect(); //you need not
} //while
}
private string ProcessLine(string text, int i)
{
string Value3 = @"(.*?)&";
string Value4 = string.Format("$1#{0}#", i);
var strFile42 = Regex.Replace(text, Value3, Value4);
return strFile42;
}
}
Bench Mark Performance Test:
I Generated file with strings with size 72 MB, and used the class to process the file 40 times without any overhead at all.
As you see the memory used by application is about 252K and constant all the time without GC collection.
results
i: 0 - Private memory: 18212 KB- Memory Used: 251.8828125 KB
i: 1 - Private memory: 18212 KB- Memory Used: 274.5390625 KB
i: 2 - Private memory: 18212 KB- Memory Used: 274.5390625 KB
i: 3 - Private memory: 18212 KB- Memory Used: 274.5390625 KB
i: 4 - Private memory: 18212 KB- Memory Used: 274.5390625 KB
i: 5 - Private memory: 18212 KB- Memory Used: 274.5390625 KB
i: 6 - Private memory: 18212 KB- Memory Used: 274.5390625 KB
i: 7 - Private memory: 18212 KB- Memory Used: 274.48828125 KB
i: 8 - Private memory: 18212 KB- Memory Used: 274.48828125 KB
i: 9 - Private memory: 18212 KB- Memory Used: 274.48828125 KB
i: 10 - Private memory: 18212 KB- Memory Used: 274.48828125 KB
i: 11 - Private memory: 18212 KB- Memory Used: 274.48828125 KB
i: 12 - Private memory: 18212 KB- Memory Used: 274.48828125 KB
i: 13 - Private memory: 18212 KB- Memory Used: 274.48828125 KB
i: 14 - Private memory: 18212 KB- Memory Used: 274.48828125 KB
i: 15 - Private memory: 18212 KB- Memory Used: 274.48828125 KB
i: 16 - Private memory: 18212 KB- Memory Used: 274.48828125 KB
i: 17 - Private memory: 18212 KB- Memory Used: 274.48828125 KB
i: 18 - Private memory: 18212 KB- Memory Used: 274.48828125 KB
i: 19 - Private memory: 18212 KB- Memory Used: 274.48828125 KB
i: 20 - Private memory: 18212 KB- Memory Used: 274.48828125 KB
i: 21 - Private memory: 18212 KB- Memory Used: 274.48828125 KB
i: 22 - Private memory: 18212 KB- Memory Used: 274.48828125 KB
i: 23 - Private memory: 18212 KB- Memory Used: 274.48828125 KB
i: 24 - Private memory: 18212 KB- Memory Used: 274.48828125 KB
i: 25 - Private memory: 18212 KB- Memory Used: 274.48828125 KB
i: 26 - Private memory: 18212 KB- Memory Used: 274.48828125 KB
i: 27 - Private memory: 18212 KB- Memory Used: 274.48828125 KB
i: 28 - Private memory: 18212 KB- Memory Used: 274.48828125 KB
i: 29 - Private memory: 18212 KB- Memory Used: 274.48828125 KB
i: 30 - Private memory: 18212 KB- Memory Used: 274.48828125 KB
i: 31 - Private memory: 18212 KB- Memory Used: 274.48828125 KB
i: 32 - Private memory: 18212 KB- Memory Used: 274.48828125 KB
i: 33 - Private memory: 18212 KB- Memory Used: 274.48828125 KB
i: 34 - Private memory: 18212 KB- Memory Used: 274.48828125 KB
i: 35 - Private memory: 18212 KB- Memory Used: 274.48828125 KB
i: 36 - Private memory: 18212 KB- Memory Used: 274.48828125 KB
i: 37 - Private memory: 18212 KB- Memory Used: 274.48828125 KB
i: 38 - Private memory: 18212 KB- Memory Used: 274.48828125 KB
i: 39 - Private memory: 18212 KB- Memory Used: 274.48828125 KB
\n(.*?)&also removes the newline it matches.