草庐IT

单调双向队列

全部标签

c# - 具有不同消息类型的消息队列

我正在研究Microsoft消息队列以进行进程间跨网络消息传递。但是当我收到一条消息时,我先验不知道我得到的是什么类型的对象,所以代码queue.Formatter=newXmlMessageFormatter(newType[]{typeof(Wibble)});无法应用之前我收到消息是因为我不知道它是否是Wibble。那么如何接收不同的消息类型呢? 最佳答案 您已经在为XmlMessageFormatter使用构造函数重载接受类型的数组。因此,只需将您希望接收的所有类型添加到该数组中,而不是只添加一种类型。queue.Forma

c# - 为什么 GC 会将对象放入终结队列?

据我所知,一旦我实现了类的析构函数,C#中的垃圾收集器就会将类的所有对象放入终结队列。当我阅读GC.Suppresfinalize的文档时,它提到对象header已经为调用finalize设置了位。我想知道为什么GC的实现者必须将所有对象放入队列中,并将内存释放延迟1-2个周期。难道他们释放内存的时候就看一下位标志,然后调用对象的finalize,然后释放内存吗?毫无疑问,我是个白痴,我无法理解GC的工作原理。我提出这个问题只是为了提高我的理解或填补我知识上的空白编辑:如果位标志用于suppressfinalize,GC实现者可以为此目的在对象header中添加另一个标志,不是吗?

c# - 如何以编程方式知道机器上是否启用了消息队列?

我知道当我尝试创建新的MessageQueue时,如果未启用消息队列,系统会抛出InvalidOperationException。但是如何以编程方式知道机器上是否启用了消息队列?我在两个不同的代码库中使用C#2.0和C#4.0。 最佳答案 您可以为此使用System.ServiceProcess,但首先您需要添加对项目的引用Service.ServiceProcess,然后您可以检索所有服务并像这样获得他们的状态:Listservices=ServiceController.GetServices().ToList();Servi

c# - .Net SMTP 队列

有人见过.net电子邮件队列吗?我希望能够指定要通过的SMTP服务器发送、报告问题并在必要或请求时重试电子邮件。理想情况下,我想要一些开源的东西。 最佳答案 如果您在Windows上使用.NET,则可以使用IISSMTP服务。使用SmtpClient并将传递方法设置为pickupdirectory。在这种模式下,SmtpClient将写入SMTP拾取文件夹(类似于c:\inetpub\smtp_root\pickup),而不是尝试自己发送邮件。该文件夹是邮件队列,SMTP服务将处理传递、重试和NDR等。比尝试自己编写要好得多。

c# - RabbitMQ 持久队列不工作(RPC-Server,RPC-Client)

我想知道为什么我的RabbitMQRPC-Client在重启后总是处理死消息。_channel.QueueDeclare(queue,false,false,false,null);应该禁用缓冲区。如果我在RPC客户端中重载QueueDeclare,我将无法连接到服务器。这里有什么问题吗?知道如何解决这个问题吗?RPC-服务器newThread(()=>{varfactory=newConnectionFactory{HostName=_hostname};if(_port>0)factory.Port=_port;_connection=factory.CreateConnectio

c# - 来自队列的大对象堆和字符串对象

我有一个Windows控制台应用程序,它应该可以运行数天和数月而无需重新启动。该应用程序从MSMQ检索“工作”并对其进行处理。有30个线程同时处理一个工作block。来自MSMQ的每个工作block大约为200kb,其中大部分分配在单个String对象中。我注意到,在处理了大约3-4千个这些工作block之后,应用程序的内存消耗高得离谱,消耗了1-1.5GB的内存。我通过探查器运行该应用程序,并注意到大部分内存(可能是gig左右)在大型对象堆中未使用,但结构是碎片化的。我发现这些未使用(垃圾收集)字节中有90%是以前分配的String。然后我开始怀疑来自MSMQ的字符串被分配、使用然后

c# - 用于解析二进制消息包的字节流的高效 C# 字节队列

我正在尝试替换我通常实现的循环缓冲区+。队列的功能是缓冲传入的字节(例如,来自串行端口或其他一些数据流),同时解析器检查队列中的字节并检测和提取消息包。标准:可以增长(即不是固定大小)>=1bytescanbeenqueuedatatime>=1bytescanbedequeuedatatime高效我很想用System.Collections.Generic.Queue...但我不确定这是否是最有效的类型。有什么建议吗?有没有更聪明的方法来做我想做的事情?(例如,有趣的建议here)感谢您的建议和意见。普兰博。 最佳答案 嗯,Que

c# - 具有多线程或任务的进程队列

我有一个电话消息应用程序,其中有很多消息需要处理。由于电话端口有限,所以消息将被先进先出处理。每条消息都有一个标志“Acknowledge”,指示已处理的消息。它当然被初始化为false。我想将所有消息放入一个队列,然后用多个线程或任务处理它们。publicclassMessageQueue{publicQueueMessageWorkItem{get;set;}publicMessagesMessage{get;set;}publicMessageQueue(){MessageWorkItem=newQueue();Message=newMessages();}publicvoidG

C# 线程和队列

这不是关于我可以或应该使用的不同方法来以最佳方式利用队列,而是关于我所看到的对我来说毫无意义的事情。voidRunner(){//membervariablequeue=Queue.Synchronized(newQueue());while(true){if(0这是在单线程中运行的:vart=newThread(Runner);t.IsBackground=true;t.Start();其他事件在其他地方“排队”。我所看到的情况是在一段时间后,Dequeue实际上会抛出InvalidOperationException,队列为空。这应该是不可能的,因为计数如何保证那里有东西,而且我很

c# - 以编程方式在 MSMQ 中添加私有(private)队列

我有超过20个队列的列表需要添加为MSMQ中的专用队列。有没有办法用命令行C#编程如果有一种方法可以使用某种脚本或.net编程,那么我可以添加它而无需手动输入并导致拼写错误。请告诉我。谢谢 最佳答案 usingSystem.Messaging;//...voidCreateQueue(stringqname){if(!MessageQueue.Exists(qname))MessageQueue.Create(qname);}您只能在本地计算机上创建专用队列。有关详细信息,请参阅:CreatingQueues