我已经开发了C#应用程序创建的线程数,一段时间后经过创建一个新的Thread.any的想法来处理这个异常时,它抛出异常的System.OutOfMemoryException的。没有使用try-catch。如何增加内存空间或如何释放内存中的线程。这个东西处理速度非常快。处理异常如不为System.OutOfMemoryException的try-catch
private void DataChangeHandler(object sender, DataChangeEventArgs e)
{
try
{ update3(e);
}
catch { }
}
public void update3(object h)
{
try
{
if (h != null)
{
DataChangeEventArgs e = (DataChangeEventArgs)h;
OdbcConnection con128 = new OdbcConnection(LocalConnection.GetLocalConnetionString());
int counter = 0;
OdbcCommand cmd;
string UpdateQuery = "";
string query1 = "";
while (counter < e.sts.Length)
{
object val = e.sts[counter].DataValue;
int hour = e.sts[counter].TimeStampNet.Hour;
int minute = e.sts[counter].TimeStampNet.Minute;
int second = e.sts[counter].TimeStampNet.Second;
int millisecond = e.sts[counter].TimeStampNet.Millisecond;
int year = e.sts[counter].TimeStampNet.Year;
int month = e.sts[counter].TimeStampNet.Month;
int day = e.sts[counter].TimeStampNet.Day;
DateTime sdate = new DateTime(year, month, day, hour, minute, second, millisecond);
string date = sdate.ToString("dd-MM-yyyy HH:mm:ss.fff");
DateTime dt = DateTime.FromFileTime(e.sts[counter].TimeStamp);
query1 += "select '" + val + "' as DTvalue ,'" + date + "' as DTdatelogged1,'" + OpcGroup.QualityToString(e.sts[counter].Quality) + "' as DTquality ,'" + dt + "' as DTtimestamp ,'" + e.sts[counter].HandleClient + "' as DTparamID Union " + Environment.NewLine;
counter++;
}
query1 = query1.Remove(query1.LastIndexOf("Union"));
UpdateQuery = "Update parameter t Left join " + Environment.NewLine;
UpdateQuery += " (" + query1 + ") Temp on" + Environment.NewLine;
UpdateQuery += "t.itemID=Temp.DTparamID" + Environment.NewLine;
UpdateQuery += "set paramvalue=DTvalue,date_logged1=DTdatelogged1,Quality=DTquality,date_logged=DTtimestamp " + Environment.NewLine;
UpdateQuery += "where t.itemID=Temp.DTparamID ";
if (con128.State == ConnectionState.Closed)
con128.Open();
cmd = new OdbcCommand(UpdateQuery, con128);
cmd.ExecuteNonQuery();
if ((con128.State == ConnectionState.Connecting) || (con128.State == ConnectionState.Open))
{
con128.Close();
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
数据的更改处理调用由OPC服务器此做过类似计时器
期待帮助?发布一些代码... – Stefan 2011-06-03 07:39:48
你不应该问一个问题中的多个问题。考虑为你的第二段创建另一个问题 - 这将使它更容易找到。 – ChrisWue 2011-06-03 07:40:04
主题在哪里? – 2011-06-03 09:30:27