草庐IT

MySQL分组查询优化

全部标签

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或更高)的产品都会被报告;转到下一个产品。所以这有一些优化,因为它只以一种方式匹配每个产品,节省了一半的处理时间。我对此进行了编码并进行了测

c# - 在内存中加入时,LINQ 查询中的 "where"位置是否重要?

情况:假设我们正在执行连接两个内存列表的LINQ查询(因此不涉及DbSet或SQL查询生成)并且此查询也有一个where条款。此where仅过滤原始集中包含的属性(查询的from部分)。问题:linq查询解释器是否优化此查询,因为它首先执行where,然后再执行join,而不管是否我在join之前或之后写了where?–因此它不必对以后无论如何都不包含的元素执行连接。示例:例如,我有一个类别列表,我想加入一个产品列表。但是,我只对ID的category感兴趣1.无论我是否编写,linq解释器是否在内部执行完全相同的操作:fromcategoryincategoriesjoinprodi

c# - LINQ左外连接查询错误: OuterApply did not have the appropriate keys

我正在使用EntityFramework作为我的ORM对两个SQL函数进行连接。执行查询时,我收到此错误消息:Thequeryattemptedtocall'OuterApply'overanestedquery,but'OuterApply'didnothavetheappropriatekeys这是我的查询:varingredientAllergenData=(fromingsindb.fnListIngredientsFromItem(productId,(short)itemType,productId)joiningAllergensindb.fnListAllergensF

c# - 何时使用 volatile 来抵消 C# 中的编译器优化

我花了大量时间在C#4.0中进行多线程编码。然而,有一个问题对我来说仍然没有答案。我知道volatile关键字会阻止编译器将变量存储在寄存器中,从而避免无意中读取过时的值。写入在.Net中总是易变的,因此任何说明它还避免过时写入的文档都是多余的。我也知道编译器优化有点“不可预测”。以下代码将说明由于编译器优化(在VS之外运行发布编译时)导致的停顿:classTest{publicstructData{publicint_loop;}publicstaticDatadata;publicstaticvoidMain(){data._loop=1;Testtest1=newTest();n

c# - 数组(结构类型)上的 Where 是否经过优化以避免不必要的结构值复制?

出于内存性能的原因,我有一个结构数组,因为项目的数量很大,并且项目会定期被抛出,因此会扰乱GC堆。这不是我是否应该使用大型结构的问题;我已经确定GC垃圾处理会导致性能问题。我的问题是当我需要处理这个结构数组时,我应该避免使用LINQ吗?由于结构不小,按值传递它是不明智的,而且我不知道LINQ代码生成器是否足够智能以执行此操作。结构如下所示:publicstructManufacturerValue{publicintManufacturerID;publicstringName;publicstringCustomSlug;publicstringTitle;publicstringD

c# - C# 编译器或 JIT 能否优化掉 lambda 表达式中的方法调用?

我是在关于另一个StackOverflow问题的讨论(incomments)之后开始这个问题的,我很想知道答案。考虑以下表达式:varobjects=RequestObjects.Where(r=>r.RequestDate>ListOfDates.Max());移动ListOfDates.Max()的评价有没有(性能)优势?在这种情况下,在Where子句之外,还是会1.编译器或2.JIT优化它?我相信C#只会在编译时进行常量折叠,并且可以说ListOfDates.Max()在编译时无法知道,除非ListOfDates本身在某种程度上是常量。也许还有另一个编译器(或JIT)优化可以确保

c# - 在 C# 中使用多个键优化缓存 - 删除对象的重复

我在Asp.NetCore中有一个项目。这个项目有一个ICacheService如下:publicinterfaceICacheService{TGet(stringkey);TGet(stringkey,Funcgetdata);TaskGet(stringkey,Func>getdata);voidAddOrUpdate(stringkey,objectvalue);}实现只是基于ConcurrentDictionary,所以它并没有那么复杂,只是从这个字典中存储和检索数据。在我的一项服务中,我有如下方法:publicasyncTask>GetLanguagesAsync(stri

C# 编译器优化

我想知道是否有人可以向我解释编译器到底做了什么让我观察到一个简单方法的性能差异如此之大。publicstaticuintCalculateCheckSum(stringstr){char[]charArray=str.ToCharArray();uintcheckSum=0;foreach(charcincharArray){checkSum+=c;}returncheckSum%256;}我正在与一位同事合作,为消息处理应用程序做一些基准测试/优化。在VisualStudio2012中使用相同的输入字符串对此函数进行1000万次迭代大约需要25秒,但是当使用“优化代码”选项构建项目时

c# - 优化 LINQ Count() > X

这个问题在这里已经有了答案:EfficientLinqEnumerable's'Count()==1'test(7个答案)关闭6年前。问题:给定IEnumerable,如何检查包含超过x的序列项目?MCVE:staticvoidMain(string[]args){vartest=Test().Where(o=>o>2&&o1)//howtooptimizethis?foreach(vartintest)//consumerConsole.WriteLine(t);}staticIEnumerableTest(){for(inti=0;i这里的问题是什么Count()将运行完整的序列,