Tag: performance

Linq Lambda与查询语法性能

我今天在我的项目中看到了一个linq查询语法,它以这种方式从特定条件的List项中计算: int temp = (from A in pTasks where A.StatusID == (int)BusinessRule.TaskStatus.Pending select A).ToList().Count(); 我想通过写它来重构它就像使用Count()来使更多的可读性和我认为它将是性能明智也好,所以我写道: int UnassignedCount = pTasks.Count(x => x.StatusID == (int)BusinessRule.TaskStatus.Pending); 但是当我通过StopWatch进行检查时,lambda表达式所经历的时间总是超过查询synax: Stopwatch s = new Stopwatch(); s.Start(); int UnassignedCount = pTasks.Count(x => x.StatusID == (int)BusinessRule.TaskStatus.Pending); s.Stop(); Stopwatch s2 = new Stopwatch(); s2.Start(); int temp = (from A in pTasks where A.StatusID == […]

MongoDB LinQ“Select”方法是否真的只能检索字段的子集?

在互联网上搜索如何使用C#官方驱动程序(但使用LinQ作为基础架构)检索MongoDB中的字段子集,我发现如何在MongoDB shell中执行此操作。 // selecting only “field” of a collection db.collection.find( { field : ‘value’ }, { field: 1 } ); 然后,我在C#LinQ Tutorial中找到了Select方法,它相当于: collection.AsQueryable().Select(x => new { x.field }); 但是,该教程说该方法“ 用于从匹配的文档中投射新的结果类型 ”。 如何确保此方法仅检索字段的子集而不检索整个结果,然后仅选择子集到新对象中? 在检索结果之前,驱动程序是否会构建查询命令?

第一次运行方法时,.NET Release代码非常慢。 如何用NGen解决它?

我已经在发布模式(x64)中部署了一个应用程序,我期望它很快,并且我注意到每当第一次执行新方法或一组方法时,都会出现严重的减速。 当我说严厉时,我的意思是第一次执行100-200毫秒,之后需要1毫秒。 从我发现的,这似乎是由于JIT编译器应该在第一次运行时编译方法。 我预计会有一些延迟,但是在执行过程中100毫秒是一个灾难性的延迟。 我知道NGen,但NGen需要在机器安装时完成。 这适用于所有人的机器具有有限的用户权限,无法安装任何东西。 该应用程序部署为可执行文件和引用DLL。 我想这就是为什么我永远不能让NGen工作的原因。 有没有办法让JIT在启动时编译每个方法? 我虽然创建虚拟变量并添加一个启动例程,除了运行每个方法一次之外什么也不做,所以它可以是启动完成时的内容。 这是否足以强制编译或者方法的每个代码路径都需要单独执行。

使用带有ModuleBuilder而不是MemoryStream的Roslyn Emit方法

使用Roslyn编译为动态程序集时,我遇到了性能问题。 编译花了大约3秒,而使用CodeDom编译器编译相同的代码大约需要300毫秒。 这是我用于编译的代码的简化版本: var compilation = CSharpCompilation.Create( “UserPayRules.dll”, syntaxTrees, assembliesToAdd); using (var stream = new MemoryStream()) { stopWatch.Start(); var result = compilation.Emit(stream); stopWatch.Stop(); Debug.WriteLine(“Compilation: {0}”, stopWatch.ElapsedMilliseconds); if (!result.Success) { throw new InvalidOperationException(); } var assembly = Assembly.Load(stream.GetBuffer()); } 这个答案建议将ModuleBuilder对象传递给Emit方法而不是MemoryStream,以加快速度。 我试图遵循这种模式,如下: var compilation = CSharpCompilation.Create( “UserPayRules.dll”, syntaxTrees, assembliesToAdd); var assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly( new AssemblyName(“ThisAssembly”), AssemblyBuilderAccess.RunAndCollect); var […]

在C#下,多少性能命中是try,throw和catch块

首先,免责声明:我有其他语言的经验,但我仍在学习C#的微妙之处 关于问题…我正在看一些代码,它以一种与我有关的方式使用try / catch块。 当调用解析例程而不是返回错误代码时,程序员使用以下逻辑 catch (TclException e) { throw new TclRuntimeError(“unexpected TclException: ” + e.Message,e); } 这是由调用者捕获的,它会抛出同样的错误…… …被调用者捕获,抛出同样的错误…… …..这是由调用者捕获的,它会抛出同样的错误…… 备份大约6个级别。 我认为所有这些catch / throw块都会导致性能问题,或者这是C#下的合理实现吗?

如何在C#中解析文本文件并被绑定?

众所周知,如果您从光盘读取数据,那么您就是IO绑定的,并且您可以比从光盘读取数据更快地处理/解析读取数据。 但这种常识(神话?)并没有反映在我的测试中。 当我读取一个带有double和int的文本文件,每行以空格分隔时,我比物理光盘速度慢得多(因子6)。 文本文件如下所示 1,1 0 2,1 1 3,1 2 更新我在一次读取时使用完整缓冲区执行ReadFile时包含了PInvoke性能,以获得“真实”性能。 ReadFile性能 – ReadFileIntoByteBuffer StringReader.ReadLine性能 – CountLines StringReader.Readline unsafe perf – ParseLinesUnsafe StringReader.Read unsafe char buf – ParseLinesUnsafeCharBuf StringReader.ReadLine +解析性能 – ParseLines 结果是 Did native read 179,0MB in 0,4s, 484,2MB/s Did read 10.000.000 lines in 1,6s, 112,7MB/s Did parse and read unsafe 179,0MB in 2,3s, […]

使用大数据填充DatagridView时性能下降

我正在使用BindingSource控件来填充datagridview控件。 它上面有大约1000多条记录。 我正在使用线程来这样做。 在这种情况下,datagridview执行速度非常慢。 我试图将DoubleBuffered属性设置为true,将RowHeadersWidthSizeMode设置为禁用,将AutoSizeColumnsMode设置为none。 但仍然是相同的行为。 请帮助我。 如何提高网格的性能。 提前致谢, 维杰

列出类别的所有性能计数器

System.Diagnostics中是否有内置方法用于检索给定CategoryName的所有实例化性能计数器? 我们有许多使用自定义性能计数器的multithreading应用程序,现在需要添加一个仪表板来显示性能统计信息。 我想以这样一种方式制作仪表板,即只要有人在新代码中添加新计数器,就不需要更新它。

&&与entity framework查询中的条件之间的区别

entity framework查询中的条件与条件和两者之间的区别 代码1 我在查询中使用了两个where where条件 dbContext.Projects.Where(p=>p.ProjectId!=ProjectId).Where(p=>p.Name==Name) .SingleOrDefault(); 代码2 我使用&&条件而不使用两个where条件 dbContext.Projects.Where(p=>p.ProjectId!=ProjectId && p.Name==Name).SingleOrDefault(); code1和code2有什么区别???? 两个查询都返回相同的值。 但我不知道差异。 请向我解释,哪一个更好。 为什么?

如何在代码中访问C#性能计数器?

我想在我的程序中使用性能计数器输出。 如何在不使用perfmon.exe的情况下访问代码中的性能计数器。 我想创建自己的性能计数器应用程序。