Yo lo que hago es efectivamente trabajar con un buffer y conforme se vaya llenando realizo otra petición para incrementar el tamaño, te paso la función que utilizo
Código PHP:
private static int _bufferSize = 16384;
/// <summary>
/// Lee el contenido de un archivo
/// </summary>
/// <param name="filename">Nobre archivo</param>
/// <returns>Contenido archivo</returns>
public static string GetContentFile(string filename)
{
if (!File.Exists(filename))
return string.Empty;
StringBuilder stringBuilder = new StringBuilder();
FileStream fileStream = new FileStream(filename, FileMode.Open, FileAccess.Read);
using (StreamReader streamReader = new StreamReader(fileStream))
{
char[] fileContents = new char[_bufferSize];
int charsRead = streamReader.Read(fileContents, 0, _bufferSize);
if (charsRead == 0)
return string.Empty;
while (charsRead > 0)
{
stringBuilder.Append(fileContents);
charsRead = streamReader.Read(fileContents, 0, _bufferSize);
}
}
return stringBuilder.ToString();
}
La variable _bufferSize es la que tendrás que modificar (si quieres) con un tamaño mayor para tener una reserva inicial siempre, pero independiente a eso el code que puse te debe funcionar sin problemas
Saludos