草庐IT

dp优化

全部标签

c# - 并行 Linq 查询优化

一段时间以来,我一直在围绕没有副作用的方法构建我的代码,以便使用并行linq来加快速度。一路走来,我不止一次偶然发现惰性评估使事情变得更糟而不是更好,我想知道是否有任何工具可以帮助优化并行linq查询。我问是因为我最近通过修改一些方法并在某些关键位置添加AsParallel来重构一些令人尴尬的并行代码。运行时间从2分钟下降到45秒,但从性能监视器可以清楚地看出,在某些地方CPU上的所有内核都没有得到充分利用。在几次错误启动后,我使用ToArray强制执行了一些查询,运行时间进一步缩短至16秒。减少代码的运行时间感觉很好,但它也有点令人不安,因为不清楚在代码中的什么地方需要使用ToArr

c# - C#中的图形布局优化

我有一个对象列表,我需要将其组织为美学图。我目前的方法涉及IronPython和遗传算法,但这需要很长时间。我一直在阅读Graphviz、QuickGraph和Graph#,但我不需要可视化部分-我已经有一个应用程序可以显示给定x/y坐标的节点。有人告诉我Sugiyama算法和基于力的算法系列都倾向于输出令人愉悦的图形,但我似乎无法找到一个.NET库来输出坐标而不是没有一些非常严格的源代码的图像黑客攻击。谁能推荐库、算法之类的? 最佳答案 有多种选择,各有利弊-您可能需要筛选this这是一个软件列表,或多或少可以满足您的需求。过去很

c# 代码似乎以一种无效的方式进行了优化,使得对象值变为 null

我的以下代码出现了一个奇怪的问题:varall=newFeatureService().FindAll();System.Diagnostics.Debug.Assert(all!=null,"FindAllmustnotreturnnull");System.Diagnostics.Debug.WriteLine(all.ToString());//throwsNullReferenceExceptionFindAll方法的签名是:publicListFindAll()通过代码我已经确认FindAll的返回值不为空,正如您从断言中看到的那样,“all”变量不为空,但在下一行中它似乎为

小红书自研小程序:电商体验与效果优化的运行时体系设计

小程序在其诞生后的几年内,凭借其简单、轻量、流畅、无需安装等特点,引来了爆发式的增长。伴随小红书电商业务的发展,我们洞察到越来越多的商家和品牌大客户有自己定制化需求场景,传统的电商和薯店存在下面三大问题:为了解决上述问题,并快速打通基于小红书体系的支付与账号体系。过去的一年内,我们踏上了自研小程序之路。目前,在小红书店铺主页、笔记详情、品牌专区、开屏均可唤起小程序。品牌合作案例展示本文将主要介绍小红书进行小程序自研时的一些业务背景及工程化、容器能力的落地方案,以及运行时针对双线程架构bridge,framework能力的设计。2.1小程序"运行时"定义运行时在不同语言中含义有所不同,但基本可以

c# - 如何从 C# 中的 "pure function"获得优化?

如果我有以下函数,它被认为是纯粹的,因为它没有副作用,并且在给定相同输入x的情况下总是会产生相同的结果。publicstaticintAddOne(intx){returnx+1;}据我了解,如果运行时了解功能纯度,它可以优化执行,这样就不必重新计算返回值。有没有办法在C#中实现这种运行时优化?我假设这种优化有一个名称。它叫什么?编辑:显然,我的示例函数不会从这种优化中获得太多好处。该示例是为了表达我心目中的纯度类型,而不是真实世界的示例。 最佳答案 正如其他人指出的那样,如果您想节省重新计算您已经计算过的结果的成本,那么您可以内存

c# - C# 编译器和 JIT 都做了哪些优化?

我将继续为我的编译器类开发C#编译器。目前,我几乎完成了教科书中有关编译器优化的章节。在大多数情况下,我的教科书在编写时并没有考虑到即时编译,我很好奇C#编译器执行的静态预jit优化与它在编写过程中执行的操作JIT流程?当我与人们谈论针对CLR进行编译时,我通常会听到诸如“大部分优化由JIT完成”之类的话。诸如循环展开、常量折叠/传播、指令交织之类的事情是由C#编译器在Jit前完成的还是由抖动处理的?如果它们不是由抖动处理的,那么抖动会进行什么样的优化,这是即时编译器所独有的? 最佳答案 我可以想象有许多JIT独有的优化;具体来说,

c# - 为什么从 byte 到 sbyte 的转换会为优化代码提供错误的值?

安装NUnit3后,可以使用以下代码示例重现该问题。[TestFixture]publicclassSByteFixture{[Test]publicvoidTest(){vardata=newbyte[]{0xFF};sbytex=-128;data[0]=(byte)x;byteb1=data[0];varb2=(sbyte)b1;Assert.AreEqual(b1.ToString(),"128");Assert.AreEqual(b2.ToString(),"-128");}}该项目应该是一个类库,因为在控制台应用程序中它是不可复制的。应该启用优化,即csproj文件中的以下

c# - 为什么 `.Select(...).Last()` 被优化,而 `.Select(...).Last(...)` 没有被优化?

考虑以下枚举器:varitems=(newint[]{1,2,3,4,5}).Select(x=>{Console.WriteLine($"inspect{x}");returnx;});这会产生元素[1,2,3,4,5],在它们被消耗时打印出来。当我调用Last此枚举器上的方法,它会触发仅访问单个元素的快速路径:items.Last();inspect5但是当我将回调传递给Last时,它从头开始遍历整个列表:items.Last(x=>true);inspect1inspect2inspect3inspect4inspect5查看.NETCore源代码,我发现:Last(IEnume

c# - 我可以强制编译器优化特定方法吗?

是否有一个属性可以用来告诉编译器必须始终优化方法,即使未设置全局/o+编译器开关?我问的原因是因为我在玩弄基于现有方法的IL代码动态创建方法的想法;当代码经过优化时,我想做的操作相当容易,但在未优化的代码中变得非常困难,因为编译器生成了额外的指令。编辑:关于困扰我的非优化的更多细节......让我们考虑以下阶乘函数的实现:staticlongFactorialRec(intn,longacc){if(n==0)returnacc;returnFactorialRec(n-1,acc*n);}(注意:我知道有更好的方法来计算阶乘,这只是一个例子)启用优化后生成的IL非常简单:IL_000

c# - 尝试优化模糊匹配

我有2,500,000个产品名称,我想尝试将它们组合在一起,即找到名称相似的产品。例如,我可以拥有三种产品:亨氏焗bean400g;HzBkdbean400g;亨氏bean400克。它们实际上是相同的产品,可以合并在一起。我的计划是使用Jaro–Winklerdistance的实现查找匹配项。该过程如下:列出内存中所有产品名称的大列表;选择列表中的第一个产品;将其与列表中紧随其后的每个产品进行比较并计算“Jaro分数”;任何匹配度高(比如0.95f或更高)的产品都会被报告;转到下一个产品。所以这有一些优化,因为它只以一种方式匹配每个产品,节省了一半的处理时间。我对此进行了编码并进行了测