【发布时间】:2011-11-02 18:07:54
【问题描述】:
我使用 yield 语句将 SQLDataReader 包装为 IEnumberable。我想用它转储到文件中。我看到一些相当大的内存利用率。想知道是否有人对如何以最小或设置内存利用率来做到这一点有任何想法。我不介意指定一个缓冲区,我只是想知道在毫无防备的服务器上释放它之前它会是什么。
我一直在使用类似以下的东西:
class Program
{
static void Main(string[] args)
{
var fs = File.Create("c:\\somefile.txt");
var sw = new StreamWriter(fs);
foreach (var asdf in Enumerable.Range(0, 500000000))
{
sw.WriteLine("adsfadsf");//Data from Reader
}
sw.Close();
}
}
string commandText = @"SELECT name FROM {0} WHERE name NOT LIKE '%@%'";
SqlCommand sqlCommand = new SqlCommand(string.Format(commandText, list.TableName.SQLEncapsulate()),
_connection);
using (SqlDataReader sqlDataReader = sqlCommand.ExecuteReader())
{
while (sqlDataReader.Read())
{
yield return sqlDataReader["name"].ToString();
}
}
【问题讨论】:
标签: c# memory stream yield sqldatareader