Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
奇怪的性能问题C#和RabbitMq_C#_Wcf_Rabbitmq_Castle Windsor - Fatal编程技术网

奇怪的性能问题C#和RabbitMq

奇怪的性能问题C#和RabbitMq,c#,wcf,rabbitmq,castle-windsor,C#,Wcf,Rabbitmq,Castle Windsor,背景: 我开发了两个用于导入数据的WCF服务。当接收数据时,我的服务在连接到RabbitMq服务器的EasyNetQ服务总线上发布请求 然后使用者接受请求,将其序列化为XML,并将其作为参数发送到存储过程进行处理。存储过程依次执行表合并以插入或更新数据 问题: 我的问题是,有时我每秒可以确认相当多的消息,有时性能非常差,这反过来导致我的队列在RabbitMq中累积 我的应用程序使用以下技术: 用于托管web服务的TopShelf 温莎依赖注入 用于记录、处理异常和计时性能的拦截器 EasyNe

背景:

我开发了两个用于导入数据的WCF服务。当接收数据时,我的服务在连接到RabbitMq服务器的EasyNetQ服务总线上发布请求

然后使用者接受请求,将其序列化为XML,并将其作为参数发送到存储过程进行处理。存储过程依次执行表合并以插入或更新数据

问题:

我的问题是,有时我每秒可以确认相当多的消息,有时性能非常差,这反过来导致我的队列在RabbitMq中累积

我的应用程序使用以下技术:

  • 用于托管web服务的TopShelf
  • 温莎依赖注入
  • 用于记录、处理异常和计时性能的拦截器
  • EasyNetQ作为消息总线
  • RabbitMq作为消息代理
我试过以下方法:

  • 多次执行相同的消息,似乎 执行时间变化很大。执行存储的 SQL Server Management Studio中的过程,执行时间为 所有重复都差不多
  • 将我的解决方案连接到本地RabbitMq服务器和本地 数据库
  • 删除了用于事务处理的拦截器
  • 从创建\打开新连接更改了我的数据库连接类 对于重复使用现有连接的每次调用(使用 语句(用于sql连接)
有人知道是什么导致了我的问题吗

提前准备好。
Matias

假设慢度来自rabbit-检查磁盘的I/O,以防消息持久化,如果不涉及磁盘,请检查内存水印,如果内存过高,rabbit会将其消息刷新到磁盘,在这个过程中,这将导致显著的缓慢。

您应该尽可能地记录日志,并将瓶颈缩小到管道中的一个非常特定的位置。没有它,你只能猜测。由于管道跨越多个子系统和技术,瓶颈可能在任何地方,也可能是任何数量的东西。我会听从@WiktorZychla的建议,努力缩小日志记录的瓶颈。您还可以尝试删除管道的特定部分。一个好的DBA应该能够查看SQL Server分析工具,并告诉您性能低下的地方。EasyNetQ消息分派器在单个线程上运行,因此您可能希望尝试异步订阅方法和异步数据库IO。