Try this:
ArrayList ReadRandom(string sourceFile, int sampleSize)
{
ArrayList BChrom = new ArrayList(sampleSize);
Random random = new Random();
FileStream ifs = new FileStream(sourceFile, FileMode.Open);
StreamReader sr = new StreamReader(ifs);
string line = "";
long lastPos = sr.BaseStream.Seek(0, SeekOrigin.End);
for (int i = 0; i < sampleSize; ++i)
{
double pct = random.NextDouble();
long randomPos = (long)(pct * lastPos);
if (pct >= 0.99)
randomPos -= 1024;
sr.BaseStream.Seek(randomPos, SeekOrigin.Begin);
line = sr.ReadLine();
line = sr.ReadLine();
sr.DiscardBufferedData();
BChrom.Add(line);
}
sr.Close();
ifs.Close();
return BChrom;
}
There are some drawbacks(like last line is never read, if the file size is less than 1024 etc) but performance is guaranteed on large files...