草庐IT

Performance

全部标签

c# - 为什么 StackOverflow 平台开发人员使用静态方法来提高性能?

我一直在阅读StackExchange技术(例如,thisarticleaboutSOperformanceonhighavailability.com),并注意到他们提到大量使用静态方法以获得更好的性能。为什么静态方法性能更好?我认为垃圾收集成本的降低与此有关(因为静态方法不需要实例);然而,还有更多吗? 最佳答案 主要原因与调用堆栈有关。虽然实例方法始终将this指针作为第一个参数,但静态方法没有这种开销。它只有几毫秒(或者在快速系统上什至只有几分之一),但在性能关键型系统中它可以加起来。

c# - 使用 transactionscope 时停止事务升级为分布式的推荐做法

使用TransactionScope对象设置不需要跨函数调用传递的隐式事务非常棒!但是,如果一个连接打开而另一个连接已经打开,事务协调器会静默升级要分发的事务(需要运行MSDTC服务并占用更多资源和时间)。所以,这很好:using(varts=newTransactionScope()){using(varc=DatabaseManager.GetOpenConnection()){//DoWork}using(varc=DatabaseManager.GetOpenConnection()){//Domoreworkinsametransactionusingdifferentcon

c# - 不寻常的垃圾收集模式

我在.net4.0下看到一些不寻常的垃圾收集模式,我无法解释,如有任何建议,我们将不胜感激。在我的程序运行的不同时间,G2收集计数开始增加并且GC%时间接近100%。这会持续一段时间然后停止(请参阅下面的性能监视器屏幕截图)。在此期间,CLRGCETW事件的PerfView跟踪显示许多长时间运行的G2收集被连续触发,原因为“AllocSmall”。任何人都可以阐明:具体是什么导致了“AllocSmall”事件为什么这些会直接触发G2收集为什么这些G2收集会背靠背发生LowMemory似乎不是问题,因为GC启动事件不将其作为原因代码(http://msdn.microsoft.com/e

c# - 托管在 Windows 服务中的 WCF 服务运行速度比控制台应用程序慢 10 倍

我有一个C#库可以进行一些文件处理。我创建了一个控制台和桌面应用程序,它使用该库并在大约1分钟内处理一个256mb的文件。然后,我创建了一个托管在Windows服务中的WCF服务,该服务使用相同的文件处理库,但在从网站调用时处理相同的256mb文件需要10倍的时间。Windows服务在具有管理员权限的域帐户下运行。调用WCF服务的开销非常快,但LoadFile方法花费的时间要长得多。我尝试通过在启动期间增加进程优先级Process.GetCurrentProcess().PriorityClass=ProcessPriorityClass.High;没有用。我已经在Win764位桌面系

c# - 高性能开发

背景我们一直在非常努力地尝试为“高性能”应用程序提出解决方案。该应用程序基本上是一个高吞吐量的内存管理器,可以同步回磁盘。“读取”和“写入”非常高,每秒大约3000个事务。我们尝试在内存中做尽可能多的事情,但最终数据会变得陈旧,需要刷新到磁盘,这就是随之而来的巨大“瓶颈”。该应用程序是多线程的,大约有50个线程。没有IPC(进程间通信)尝试我们最初是用Java编写的,它运行得很好,直到达到一定的负载,遇到了瓶颈,它就跟不上了。然后我们在C#中尝试,同样遇到了瓶颈。我们使用非托管代码(C#)进行了尝试,虽然在初始测试中使用MMF(内存映射文件)速度非常快,但在生产中,读取速度很慢(正在使

c# - 用于 .NET 的快速且内存高效的 ASCII 字符串类

这可能以前有人问过,但我找不到任何这样的帖子。是否有处理ASCII字符串的类?好处很多:比较应该更快,因为它只是逐字节比较(而不是使用可变编码的UTF-8)内存效率高,在大字符串中应该使用大约一半的内存ToUpper()/ToLower()的更快版本,使用语言不变的查找表JonSkeet写了一个基本的AsciiStringimplementation并证明了#2,但我想知道是否有人更进一步并完成了这样的类(class)。我确信会有用处,尽管通常没有人会采用这样的方法,因为所有现有的String函数都必须手动重新实现。StringAsciiString之间的转换会分散在各处,从而使原本简

c# - 如何以高效的方式编写 1GB 文件 C#

我有大约1GB的.txt文件(包含超过一百万行),我有一个字符串列表,我试图从文件中删除字符串列表中存在的所有行并创建新文件但是这需要很长时间。using(StreamReaderreader=newStreamReader(_inputFileName)){using(StreamWriterwriter=newStreamWriter(_outputFileName)){stringline;while((line=reader.ReadLine())!=null){if(!_lstLineToRemove.Contains(line))writer.WriteLine(line)

c# - Linq 对象 : inner query performance

在回答questions之一时我看到了2个LINQ代码示例,它们应该完全相同。但我对性能感到好奇,发现一个代码比另一个代码快得多。我不明白为什么。我从问题中提取了数据结构publicstructStrc{publicdecimalA;publicdecimalB;//morestuff}publicclassCLASS{publicListlistStrc=newList();//otherstuff}然后我写了简单的基准测试(使用benchmarkdotnet库)UPD我包括了所有要求的测试publicclassTestCases{privateDictionarydict;publ

c# - 相对于正确配置的同步模型,异步模型真的能提高吞吐量吗?

每个人都知道异步为您提供“更好的吞吐量”、“可扩展性”以及在资源消耗方面更高效。在进行下面的实验之前,我也想到了这种(简单的)方式。它基本上表明,如果我们考虑异步代码的所有开销并将其与正确配置的同步代码进行比较,它几乎不会产生性能/吞吐量/资源消耗优势。问题:与正确配置线程池的同步代码相比,异步代码实际上执行得更好吗?可能是我的性能测试存在某种戏剧性的缺陷?测试设置:两个ASP.NETWebAPI方法,JMeter尝试使用200个线程线程组调用它们(30秒恢复时间)。[HttpGet][Route("async")]publicasyncTaskAsyncTest(){awaitTas

c# - 手动查找比加入 LINQ 有什么好处?

构建和使用手动查找(ILookup)方法比使用Join的连接更快或GroupJoin在本地IEnumerableLINQ中的序列?我在某处读到编译器实际上翻译了Join的内部序列和GroupJoin至ILookup无论如何。什么会ILookup单独使用它的好处是什么? 最佳答案 这取决于。如果您正在使用基于DataContext的对象,那么连接会通过select语句一直向下转换到SQL服务器中。如果它是一个POCO(或更具体地说是一个普通的旧CLR集合)或其他东西,那么是的,它被用作ILookup。