Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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
.net 记录到MSMQ/文本文件/数据库的性能比较_.net_Logging_Msmq_Enterprise Library - Fatal编程技术网

.net 记录到MSMQ/文本文件/数据库的性能比较

.net 记录到MSMQ/文本文件/数据库的性能比较,.net,logging,msmq,enterprise-library,.net,Logging,Msmq,Enterprise Library,登录.NET(C#)服务器应用程序有多种选择。我们将使用企业图书馆。因此,以下是方法: 1) 同步向MSMQ写入日志,然后使用Win服务读取MSMQ。队列位于服务器应用程序的本地计算机上。 2) 同步将日志写入磁盘(即滚动文本文件) 3) 同步地将日志写入数据库(在我们的应用程序中是Oracle) 日志量可能相当高。那么,哪一个性能最好?我猜顺序是1,2,3。我说得对吗?在这个特定场景中,除了写速度之外,还有其他性能因素吗?还有其他选择吗,我在这里没有指出,这可能是更好的方法吗?在没有听到应用程

登录.NET(C#)服务器应用程序有多种选择。我们将使用企业图书馆。因此,以下是方法:

1) 同步向MSMQ写入日志,然后使用Win服务读取MSMQ。队列位于服务器应用程序的本地计算机上。
2) 同步将日志写入磁盘(即滚动文本文件)
3) 同步地将日志写入数据库(在我们的应用程序中是Oracle)


日志量可能相当高。那么,哪一个性能最好?我猜顺序是1,2,3。我说得对吗?在这个特定场景中,除了写速度之外,还有其他性能因素吗?还有其他选择吗,我在这里没有指出,这可能是更好的方法吗?

在没有听到应用程序在日志方面的需求的情况下:

我觉得MSMQ日志场景对这个问题有点大影响

MSMQ肯定会更快,因为您的应用程序将使用网络通信协议,而不是处理磁盘延迟和DB连接创建和断开。不过,考虑到MSMQ使用磁盘,增益可能可以忽略不计。然后问题是MSMQ目标/目标队列是否在本地计算机上

坚持磁盘日志记录

考虑坚持将日志记录到具有适当滚动的磁盘上的文件(根据需要每天/小时)。如果你非常关注主轴速度,考虑一下将这些日志文件写入RAM磁盘。然后有一个过程,将这些文件从RAM中定期拷贝到磁盘上

衡量您的日志记录性能需求


提示有关过早优化的笑话。测量,再测量。在评估解决方案的性能之前,您不知道自己需要什么。考虑到你可能有10000 rpm主轴,很可能磁盘记录解决方案将充分发挥作用。如果决定跳转到“外包”组件(如MSMQ或数据库写入)的复杂解决方案,可能会有一点YAGNI。我用你所说的速度来说明这一点。

< P>我认为你应该考虑“异步写日志到数据库”。i、 e.对于要记录的每个项目,将其在内存中排队,并有一个单独的线程写入数据库。如果队列机制维护日志消息的顺序,那么让主应用程序等待日志记录完成是没有意义的

还有,你看过log4net了吗?它包括许多日志选项,包括强大的磁盘旋转日志、UDP日志等


您可能还希望在创建日志文件后将Splunk作为搜索日志文件的一种方式。

您对MSMQ、文件和数据库的排名在典型情况下应该是正确的

我知道您关心的是性能,但我还没有在一个业务线应用程序中遇到这样一个场景,我对使用的日志机制感到遗憾。与执行业务逻辑所花费的时间相比,日志记录所花费的时间不仅意义重大

此外,如果您真的关心性能,您可能需要研究企业库之外的其他选项。e、 log4net历来运行得更快

除了性能外,我也会考虑其他要求。e、 g.您是否需要报告或查询日志?您是否需要一个中央日志存储库(或者它是否有用)?如果这些问题的答案都是肯定的,那么您可能希望使用数据库或MSMQ为数据库提供数据


其他考虑因素可能是现有实施或标准、总体解决方案复杂性(MSMQ>文件)、各种选项的可支持性(例如,如果没有运营专业知识,您可能不想使用MSMQ)。

您好,谢谢您的回答。更新了有关“MSMQ目标/目标队列”的问题。