我在C#中执行循环时出现错误消息;
CLR无法从COM上下文0x1201050转换为 COM上下文0x1201108持续60秒。拥有的线程 目的地上下文/公寓很可能要么做非 抽空等待或处理很长时间的运行操作 抽取Windows消息。这种情况一般都是消极的 性能影响甚至可能导致应用程序变为非 响应或内存使用随着时间的推移不断累积。至 避免这个问题,所有单线程单元(STA)线程都应该 使用抽取等待原语(如CoWaitForMultipleHandles)和 在长时间运行期间定期泵送消息。
我知道是什么导致了这个问题,它是一个for循环,它将8000多人添加到MySQL
的表中。即使我知道循环是问题,我在C#之前从未遇到过这个问题,我不确定如何处理它。这是导致问题的循环;
public void WriteToMySQL(DataTable dTable)
{
int id;
string firstName, middleName, lastName, formalName, title, company;
for (int i = 0; i < 8094; i++)
{
id = Convert.ToInt32(dTable.Rows[i][0]);
firstName = dTable.Rows[i][1].ToString();
middleName = dTable.Rows[i][2].ToString();
lastName = dTable.Rows[i][3].ToString();
formalName = dTable.Rows[i][4].ToString();
title = dTable.Rows[i][5].ToString();
company = dTable.Rows[i][6].ToString();
using (MySqlConnection mysqlCon = new MySqlConnection(mysqlConstr))
{
mysqlCon.Open();
var mysqlCmd = new MySqlCommand("INSERT INTO sdcdatabase.people VALUES(@id, @firstname, @middlename, @lastname, @formalname, @title, @company)", mysqlCon);
mysqlCmd.Parameters.AddWithValue("@id", id);
mysqlCmd.Parameters.AddWithValue("@firstname", CharactersOnly(firstName));
mysqlCmd.Parameters.AddWithValue("@middlename", CharactersOnly(middleName));
mysqlCmd.Parameters.AddWithValue("@lastname", CharactersOnly(lastName));
mysqlCmd.Parameters.AddWithValue("@formalname", CharactersOnly(formalName));
mysqlCmd.Parameters.AddWithValue("@title", CharactersOnly(title));
mysqlCmd.Parameters.AddWithValue("@company", CharactersOnly(company));
mysqlCmd.ExecuteNonQuery();
}
}
}
CharactersOnly
只会删除string
中不属于某个字符的所有内容。我理解并且可能知道有更好的方法来做到这一点,但是我还没有更好地解决问题。有没有办法纠正不会导致C#60秒后抱怨的循环?