c# – 如何从队列中删除邮件?
发布时间:2020-12-15 08:10:38 所属栏目:百科 来源:网络整理
导读:我有消息陷入队列,我正在寻找一种以编程方式删除它们的方法. 有没有办法从队列中删除超过x天的消息? 我可以连接和删除这样的队列,但不知道如何删除单个邮件. MessageQueue queue = new MessageQueue(@".private$SomeTestName");//queue.Purge(); //delete
我有消息陷入队列,我正在寻找一种以编程方式删除它们的方法.
有没有办法从队列中删除超过x天的消息? MessageQueue queue = new MessageQueue(@".private$SomeTestName"); //queue.Purge(); //deletes the entire queue try { // Peek and format the message. Message m = myQueue.Peek(); // Display message information. Console.WriteLine("Sent time {0}",m.SentTime); Console.WriteLine("Arrived time {0}",m.ArrivedTime); } 解决方法
没有API可用于执行此操作.但你可以使用
> 使用枚举的好处是,如果队列有很多消息,读取所有消息可能会导致OutOfMemoryException.使用枚举器,您一次只能读取1条消息,并且可以重用为其分配的内存. 提高性能的另一个技巧是指定要读取的属性,这样如果消息体很大而您对内容不感兴趣,则可以禁用它. var enumerator = _queue.GetMessageEnumerator2(); // get enumerator var staleDate = DateTime.UtcNow.AddDays(-3); // take 3 days from UTC now var filter = new MessagePropertyFilter(); // configure props to read filter.ClearAll(); // don't read any property filter.ArrivedTime = true; // enable arrived time _queue.MessageReadPropertyFilter = filter; // apply filter while (enumerator.MoveNext()) if(enumerator.Current.ArrivedTime.Date >= staleDate) enumerator.RemoveCurrent(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |