从DataSet / DataTable迁移到队列

时间:2017-05-31 01:54:47

标签: c#

我在winform应用程序中有一个日志页面,显示后台进程并使用DataSet和DataTables将消息排序到消息“队列”中。在发现新进程时,会创建一个新日志。这工作得很好,但是我有内存泄漏。我一直在研究切换到“队列”。

(由于复杂性和长度而粗略复制/粘贴)

DataSet dsLogs = new DataSet("Logs");
....
[Message Queue accept new message, the following creates a new tab with an icon to click and watch queue - accept "oLogObject" from message queue]

            if (!dsLogs.Tables.Contains(szTableName)) // add table in
            {
                DataTable dtNew = new DataTable(szTableName);
                dtNew.Columns.Add("EventDate", typeof(string));
                dtNew.Columns.Add("Function", typeof(string));
                dtNew.Columns.Add("IsError", typeof(bool));
                dtNew.Columns.Add("LongMessage", typeof(string));
                dtNew.Columns.Add("Message", typeof(string));
                dtNew.Columns.Add("Process", typeof(string));
                dtNew.Columns.Add("RecID", typeof(string));
                dtNew.Columns.Add("Thread", typeof(string));
                dtNew.Columns.Add("UserName", typeof(string));

                MenuAdmin.btnProcessStatus NewPanel = new MenuAdmin.btnProcessStatus();
                NewPanel.SetProcess(oLogObject.Process);
                NewPanel.SetThread(oLogObject.Thread);
                NewPanel.Name = szTableName;
                NewPanel.SetName(szTableName);
                NewPanel.Click += NewPanel_Click;

                dsLogs.Tables.Add(dtNew);
             }

             DataRow drRow = dsLogs.Tables[szTableName].NewRow();
             AddRow(oLogObject, szTableName); // adds the current log object to the table

所以我的Queues问题是我不能将它们与DataSet一起使用,所以我不能用这样的名字命名/引用它们:

DataRow drRow = dsLogs.Tables[szTableName].NewRow();

这是否可行?在队列中可以实现此目的的术语是什么?

1 个答案:

答案 0 :(得分:1)

队列无法直接使用DataSet / DataTable数据。队列是一个通用集合(System.Collections.Generic命名空间中的.NET版本),因此您可能希望创建一个类(类似于AppEvent),其中包含您在DataTable中定义的所有字段。向Queue添加新项时,您将添加AppEvent类的新对象。

我希望这能解决问题。