返回首页


如果你已经在应用程序的开发工作足够长的像我这样的,我敢肯定,你知道在您的应用程序纳入一个好的日志机制的好处。
最近,我正在设计一个基于SOA的企业平台。有一些服务和应用程序所需的一些严重的记录和诚实,我也没有多想,只是包括一些第三方组件,如log4net的或Microsoft企业应用程序日志记录块,将数据记录到一个文本文件内每个应用程序或服务。
但我有第二个想法时,我的架构和重构是一个巩固和集中的应用程序开发和任何相关的完善重用的代码,程序或数据的坚定信仰者。我认为必须有一个更好的方式来实现日志记录?
所以我做了,我从以前的日志记录实现经历的困境列表。打我最重要的事情是当事情出了错,在访问日志信息所涉及的困难。你不得不找到该应用程序,服务器,然后通过扫描一个巨大的庞大的日志文件,你必须是一个谁也访问此文件。这意味着一个显著的下降时间的解决方案,即使是一个微小的变化,在配置。
,所以最有可能的解决方案是集中记录,但等待... ...有关性能又如何呢?记录到一个平面文件一定意味着对性能的一击。因此,让我们有集中的异步日志记录是我想出了。集中异步日志记录
我使用企业应用程序日志分布式服务,实行集中的异步日志记录。
,简单地说,你有各种不同的服务器上应用程序日志消息队列和运行一个Windows服务,会从队列中读取并填充数据库。然后创建一个日志查看器应用程序,您可以使用它来分析日志。有了这个设置,可以实现一个处理日志记录一些有用的进程。

回答

评论会员:游客 时间:2012/01/26
而不是数组列表,你可以使用数据表。你有一个选项,在数据表进行排序。codeprelang="vb"datatableavg=CreateDatatable()spanclass="code-comment"'/spanspanclass="code-comment"youhavetocreateadatatableherewiththestudentdetailsandgradeonecolumn.inyourfunctionihavenotspecifiedhowtocreateadatatable./spanspanclass="code-comment"'/spanspanclass="code-comment"thenuhavetosortbythebellowstatement./spandatatableavg.DefaultView.Sort=spanclass="code-string""/spanspanclass="code-string"grade"/spandatatableavg=spanclass="code-keyword"CType/span(datatableavg.DefaultView.ToTable(),DataTable)/pre/code然后DataTable将包含排序的值。你可以使用它。{C}然后访问的第一行,你必须使用下面的语句。codeprelang="vb"orow(spanclass="code-digit"0/span).Item(spanclass="code-string""/spanspanclass="code-string"gratde"/span).ToString()/pre/code
Jimmanuel
评论会员:游客 时间:2012/01/26
的递归方法。。源对象:codeprelang="cs"spanclass="code-keyword"class/spanMyObj{spanclass="code-keyword"public/spanspanclass="code-keyword"int/spanAnInteger;}/pre/code一个普通的递归排序功能:codeprelang="cs"spanclass="code-keyword"private/spanspanclass="code-keyword"static/spanspanclass="code-keyword"void/spanGetValues<T>(List<T>sourceList,spanclass="code-keyword"int/spaniter,List<T>resultList,Func<T,spanclass="code-keyword"bool/span>compareFunc){spanclass="code-keyword"if/span(iter>=sourceList.Count){spanclass="code-keyword"return/span;}spanclass="code-keyword"if/span(compareFunc(sourceList[iter])){resultList.Add(sourceList[iter]);}GetValues(sourceList,iter+spanclass="code-digit"1/span,resultList,compareFunc);}/pre/code和使用情况:codeprelang="cs"List<MyObj>myList=spanclass="code-keyword"new/spanList<MyObj>();spanclass="code-keyword"for/span(spanclass="code-keyword"int/spani=spanclass="code-digit"0/span;i<spanclass="code-digit"10/span;i++){myList.Add(spanclass="code-keyword"new/spanMyObj(){AnInteger=i});}List<MyObj>results=spanclass="code-keyword"new/spanList<MyObj>();GetValues(myList,spanclass="code-digit"0/span,results,obj=>obj.AnInteger<spanclass="code-digit"5/span);spanclass="code-keyword"foreach/span(MyObjobjspanclass="code-keyword"in/spanresults){Trace.WriteLine(spanclass="code-string""/spanspanclass="code-string"Obj:"/span+obj.AnInteger);}/pre/code但愿这是一个功课或某种锻炼,因为自己限制在这种情况下没有循环,没有LINQ是一种愚蠢的。这个递归的例子是远远不是明智的最佳解决方案的性能。此外,列表是首选以上的ArrayLists
西蒙杜福尔
评论会员:游客 时间:2012/01/26
如果你想一个简单的方法,你可以保持一个ArrayList,你知道是按职级排序。然后,你只能从一个循环,启动你的品位,而不是整个列表的末尾。该算法仍然是O(N),因为你必须在每个项目的循环。另一种方案是保持每个年级一个ArrayList。通过这种方式,发现所有的一年级的学生可以在O(1),但他们在屏幕上显示的是O(N)反正。而不是存储在一个ArrayList的东西,你可以把他们的数据库中..像一个Access数据库。然后,您可以使用一些简单的SQL迅速得到任何你想要的信息。这绝对是最好的解决办法。ArrayList中从未建立快速筛选或排序数据。
约翰西蒙斯/取缔程序员
评论会员:游客 时间:2012/01/26
更改列表(而不是到一个ArrayList),并编写相应的排序代表,或使用代码从这个技巧/诀窍:{A1}顺便说一句,这种气味就像一个家庭作业。只有学院教官将对项目鲁钝不要使用这些功能的要求。我的意思是,认真...
你可以尝试{A2}]方法