我添加了一些 .dispose() 和 .close() 调用,它们似乎帮助了一小部分,但一旦所有操作完成,我仍然看到应用程序使用 600MB 的 RAM。我错过了什么?
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void CreateCSVFile(DataTable dt, string strFilePath)
{
#region Export Grid to CSV
// Create the CSV file to which grid data will be exported.
StreamWriter sw = new StreamWriter(strFilePath, false);
// First we will write the headers.
//DataTable dt = m_dsProducts.Tables[0];
int iColCount = dt.Columns.Count;
for (int i = 0; i < iColCount; i++)
{
sw.Write(dt.Columns[i]);
if (i < iColCount - 1)
{
sw.Write(",");
}
}
sw.Write(sw.NewLine);
// Now write all the rows.
int current_row = 0;
foreach (DataRow dr in dt.Rows)
{
current_row++;
if (current_row % 1000 == 0)
{
lbl_progress.Text = current_row.ToString() + " of " + dt.Rows.Count.ToString();
this.Refresh();
Application.DoEvents();
}
for (int i = 0; i < iColCount; i++)
{
if (!Convert.IsDBNull(dr[i]))
{
if (dr[i] is string)
{
sw.Write("\"" + dr[i].ToString().Replace(Environment.NewLine,", ").Replace("\"", "") + "\"");
}
else
{
sw.Write(dr[i].ToString());
};
}
if (i < iColCount - 1)
{
sw.Write("|");
}
}
sw.Write(sw.NewLine);
}
dt.Dispose();
sw.Close();
#endregion
}
private void button1_Click(object sender, EventArgs e)
{
button1.Enabled = false;
string strConn = ConfigurationManager.AppSettings["sql_connection"].ToString();
SqlConnection conn = new SqlConnection(strConn);
for (int i = 1; i <= int.Parse(ConfigurationManager.AppSettings["query_count"].ToString()); i++)
{
try
{
SqlDataAdapter da = new SqlDataAdapter(System.Configuration.ConfigurationManager.AppSettings["sql" + i.ToString()].ToString(), conn);
DataSet ds = new DataSet();
da.Fill(ds);
da.Dispose();
DataTable dt = ds.Tables[0];
ds.Dispose();
textBox1.Text += "\r\n[" + DateTime.Now.ToString("HH:mm:ss") + "] Starting sql" + i.ToString();
this.Refresh();
Application.DoEvents();
CreateCSVFile(dt, System.Configuration.ConfigurationManager.AppSettings["output_path"].ToString() + i.ToString() + ".csv");
textBox1.Text += "\r\n[" + DateTime.Now.ToString("HH:mm:ss") + "] Finished sql" + i.ToString();
dt.Dispose();
this.Refresh();
Application.DoEvents();
}
catch (Exception ex)
{
textBox1.Text += "\n" + ex.Message;
//break;
}
}
textBox1.Text += "\r\n[" + DateTime.Now.ToString("HH:mm:ss") + "] All done";
button1.Enabled = true;
}
}