草庐IT

OPTIMIZATION

全部标签

c# - 如何优化 C# 中数组的复制 block ?

我正在编写一个实时视频成像应用程序,需要加快此方法的速度。目前执行大约需要10毫秒,我希望将其缩短至2-3毫秒。我已经尝试了Array.Copy和Buffer.BlockCopy,它们都需要大约30毫秒,比手动复制长3倍。一种想法是以某种方式将4个字节复制为一个整数,然后将它们作为一个整数粘贴,从而将4行代码减少为一行代码。但是,我不确定该怎么做。另一个想法是以某种方式使用指针和不安全代码来做到这一点,但我也不确定该怎么做。非常感谢所有帮助。谢谢!编辑:数组大小为:inputBuffer[327680]、lookupTable[16384]、outputBuffer[1310720]p

c# - 在 .Net 中,出于性能原因,我什么时候应该通过引用传递结构?

在我的C#应用程序中,我有一个很大的结构(176字节),它每秒可能被传递给一个函数十万次。这个函数然后简单地获取一个指向结构的指针并将指针传递给非托管代码。函数和非托管代码都不会对该结构进行任何修改。我的问题是,我应该按值还是按引用将结构传递给函数?在这种特殊情况下,我的猜测是通过引用传递比将176个字节压入调用堆栈要快得多,除非JIT碰巧认识到该结构从未被修改(我的猜测是它无法识别这一点,因为该结构的地址传递给非托管代码)并优化代码。既然已经到了,我们还要回答更一般的情况,即函数不将结构的指针传递给非托管代码,而是对结构的内容执行一些只读操作结构。通过引用传递结构会更快吗?在这种情况

c# - JIT 和循环优化

usingSystem;namespaceConsoleApplication1{classTestMath{staticvoidMain(){doubleres=0.0;for(inti=0;i通过针对c++版本对这段代码进行基准测试,我发现性能比c++版本慢10倍。我对此没有问题,但这让我想到了以下问题:似乎(经过几次搜索)JIT编译器无法像C++编译器那样优化此代码,即只调用一次sqrt并在其上应用*1000000。有没有办法强制JIT去做? 最佳答案 我重现,C++版本的时钟为1.2毫秒,C#版本的时钟为12.2毫秒。如果您

C# XNA : Optimizing Collision Detection?

我正在开发一个简单的碰撞检测演示,其中仅包含一堆在窗口中弹跳的对象。(目标是查看游戏一次可以处理多少个对象而不会丢帧。)存在重力,所以物体要么移动要么与墙壁碰撞。天真的解决方案是O(n^2):foreachCollidablec1:foreachCollidablec2:checkCollision(c1,c2);这很糟糕。因此,我设置了CollisionCell对象,它维护有关屏幕一部分的信息。这个想法是每个Collidable只需要检查其单元格中的其他对象。对于60像素x60像素的单元格,这产生了近10倍的改进,但我想进一步插入它。分析器显示,代码将50%的时间花在每个单元格用来获

C# 数组还是字典?

我想知道C#数组是否具有恒定的访问速度?我需要在静态数组中存储1000个项目,这些项目将在服务器启动期间进行初始化。该数组将只读使用,所以数组不会有任何变化。我应该改用简单的C#数组(newMyClass[])还是字典。我是C#的新手,正在尝试了解C#数组访问的工作原理。它们可以在速度上与C++数组进行比较吗? 最佳答案 最佳选择取决于您需要如何访问元素。如果你想通过索引访问它们,那么使用数组。C#中的数组具有恒定的访问速度,并且在访问速度方面与C++数组非常相似。但是,字典的访问速度非常快(Itemproperty接近O(1)的访

c# - for 循环优化 - 需要还是不需要?

我是否必须像下面那样优化我的FOR循环,或者编译器会为我做这件事?//thisisslow,right?for(inti=0;i附言。我敢打赌这已经发布了,但我还没有找到任何东西,很抱歉可能是假的。PPS。抱歉,我编写了很多JavaScript-我们必须考虑这些优化...在.net世界中可能看起来很荒谬。 最佳答案 好吧,这取决于DropDownItems.Count是如何实现的-但坦率地说,它可能是一个简单的字段支持的属性......这将成为第一个代码与第二个一样快,但可读性更高。首先是可读性-然后衡量性能并仅在必要时进行微优化。

c# - 有效消除 .NET 表达式树中的公共(public)子表达式

我已经编写了一个DSL和一个从中生成.NET表达式树的编译器。树中的所有表达式都是无副作用的,并且表达式保证是“非语句”表达式(没有局部变量、循环、block等)。(编辑:树可能包括文字、属性访问、标准运算符和函数调用——它们可能在内部做一些奇特的事情,比如内存,但在外部没有副作用)。现在我想对其进行“公共(public)子表达式消除”优化。例如,给定一棵对应于C#lambda的树:foo=>(foo.Bar*5+foo.Baz*2>7)||(foo.Bar*5+foo.Baz*2...我想生成树等效项(忽略一些短路语义被忽略的事实):foo=>{varlocal1=foo.Bar*5

JavaScript 样式/优化 : String. indexOf() v. Regex.test()

我最近遇到了这段JavaScript代码:if(",>=,,".indexOf(","+sCompOp+",")!=-1)我很感兴趣,因为要编写这个测试我会这样做:if(/(>=|)/.test(sCompOp))这只是风格上的差异,还是其他代码的作者了解一些我不知道的优化知识?或者也许有不同的充分理由这样做,或者不使用正则表达式......?在我看来,为此使用String.indexOf()有点难以阅读(但是,我对正则表达式很满意),但是有没有实例可能比编写等效的正则表达式“更好”?通过可能更快或更有效的“更好”(尽管显然这取决于浏览器的JavaScript引擎)或其他一些我不知道的

javascript - 延迟加载 addthis 脚本? (或延迟加载依赖于已触发事件的外部 js 内容)

我想要addthis我的用户可以使用小部件,但我想延迟加载它,以便我的页面尽快加载。但是,在通过脚本标签然后通过我的延迟加载方法尝试之后,它似乎只能通过脚本标签工作。在经过混淆的代码中,我看到了一些看起来依赖于DOMContentLoaded事件的东西(至少对于Firefox而言)。由于DOMContentLoaded事件已经触发,因此小部件无法正确呈现。怎么办?我可以只使用脚本标记(速度较慢)...或者我可以触发(以跨浏览器的方式)DOMContentLoaded(或等效)事件吗?我觉得这可能是不可能的,因为我相信(像jQuery一样)内容就绪事件有多个测试,因此必须发生多个模拟事件

javascript - Chrome 时间轴缓冲区使用情况

我正在尝试优化网站的动画。我正在使用Chrome开发工具(网络/时间线/配置文件)获取一些统计数据,并发现当我跟踪时间线时,使用率总是在很短的时间内缓冲到100%。我在stackoverflow上进行了测试,缓冲区的使用情况不同。Myquestionsare:Whatexactlyis"bufferusage"?ShouldIbeworriedaboutit,andif"yes"-howtoimproveit?任何帮助将不胜感激:)附注抱歉我的英语不好 最佳答案 打开时间线将事件记录到缓冲区中。当缓冲区已满时,Chrome会尝试有选