Tag: 性能

最快的方法来sorting在JavaScript中的32位有符号整数数组?

_radixSort_0 = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; /* RADIX SORT Use 256 bins Use shadow array – Get counts – Transform counts to pointers – Sort from LSB – MSB */ function radixSort(intArr) { var cpy = new Int32Array(intArr.length); var c4 = [].concat(_radixSort_0); var […]

位图性能优化模式

我发现了几种优化WPF中的位图处理的模式。 但是,我不知道何时使用每种模式。 正如我认为这是一个普遍的问题,我总结了我的理解和我的猜想,并寻求你的帮助。 如果你可以添加模式 ,解释它们的不同之处 ,说明它们是使用CPU还是使用GPU ,以及什么时候使用它们以及如何合并它们 ,那将会是一个巨大的帮助! 上下文 – 图片“网格”场景: 我的应用程序必须显示许多位图图像。 图像显示在屏幕上的行和列网格组织(不一定是网格或UniformGrid类,认为窗口媒体播放器的相册视图)。 图像可能会在不同的网格单元之间移 任意单元格中的一些图像可能被其他单元replace。 图像应该是可点击的,应该提供一个上下文菜单,应该是可select的,可拖拽的等等。换句话说,“将小编辑器合并成一个大的位图”是不适用的,至less不是天真的。 模式0:黑客 把这些小杂烩混合成一个位图(如何绘制上下文?),并将其作为背景。 覆盖这与图像与空的内容,将处理命中,上下文菜单,事件等 优点是我们只在这里讲两个位图:当前显示的和应该replace的位图。 这应该是非常快的。 但是,我多年的经验提高了危险的红旗。 你的评论? 模式1:缩小图像大小 当你事先知道要调整的图像大小,以及当你准备失去performance的细节(颜色)时,这是一个不容小觑的过程: 使用BitmapImage.DecodePixelWidth减小位图大小 使用FormatConvertedBitmap.DestinationFormat减less颜色信息 将控件的缩放行为设置Image.Stretch设置为Stretch.None 将图像的SetBitmapScalingMode设置为LowQuality。 冻结bug子手 在这里看代码。 模式2:背景预取 当您认为您可以利用用户凝视屏幕上的图像并准备好接下来要显示的图像时,此模式适用。 除了内存开销之外,项目的缺点是必须支持.Net Framework 4目标,而不仅仅是客户端configuration文件,因此可能会导致客户端上的安装。 你自己将不得不忍受asynchronous编程的痛苦。 在这种模式下,您可以创build所需数量的图像控件。 当需要添加,移动或删除位图时,只能修改图像控件的位图源。 BackgroundWorker任务负责预取BitmapSource(可能使用上面的“缩小图像大小”模式)并将其插入到MemoryCache中。 为此,您必须将BitmapImage的CacheOption设置为OnLoad,以便工作被卸载到后台工作者。 模式3:绘图上下文 这是Microsoft支持部门的Sheldon Ziao在MSDN WPF论坛上提出的build议。 请参阅Adam Nathan的WPF 4的第15章“2Dgraphics”中的494页,了解DrawingContext的描述。 我不能说我明白这一点。 根据这里的答案,我会认为这将改善处理几何图纸,而不是位图。 接下来,我不认为这将支持图像的焦点和事件要求(我不好意思,因为没有在论坛上更好地解释要求)而且,我担心这本书的总结性的句子:“请注意,使用DrawingContext不会改变您在保留模式系统中运行的事实。 指定的绘图不会立即发生; 这些命令被WPF所保留,直到需要为止。“这意味着,一旦我们的处理程序重新开始,我们就不能像”后台预取“那样利用并行性。 模式4:可写位图 这里的MSDN文档将其描述为双缓冲系统:您的UI线程更新缓冲区; […]

数据库:查询地理位置数据的最佳性能方式?

我有一个MySQL数据库。 我将数据库存储在数据库中,并且只对数据库执行1个查询, 但是我需要这个查询以超快的速度执行 ,这就是返回一个方框中的所有家庭的地理纬度和经度。 SELECT * FROM homes WHERE geolat BETWEEN ??? AND ??? AND geolng BETWEEN ??? AND ??? 如何最好的方式来存储我的地理数据,以便我可以执行此查询显示地理定位框中最快的所有家庭? 基本上: 我使用最好的SQL语句执行此查询最快? 有没有其他方法存在,可能甚至不使用数据库,我查询盒装地理位置范围内的家园的结果最快的方式? 万一它有帮助,我已经包括我的数据库表架构如下: CREATE TABLE IF NOT EXISTS `homes` ( `home_id` int(10) unsigned NOT NULL auto_increment, `address` varchar(128) collate utf8_unicode_ci NOT NULL, `city` varchar(64) collate utf8_unicode_ci NOT NULL, `state` varchar(2) collate utf8_unicode_ci NOT […]

在Haskell中优化数组的性能

我正在研究类似MineCraft的世界的地形生成algorithm。 目前,我正在使用Simplex Noise Demystified(PDF)中的实现方法来使用单工噪声,因为单纯的噪声应该比Perlin噪声更快并且产生更less的伪像。 这看起来相当不错(见图片),但到目前为止,它也很慢。 对于块(16x16x128块)中的每个块运行噪声函数10次(对于地形高度,温度,树木位置等,我需要具有不同波长的噪声),每个块有3个八度的噪声,或者大约100万次调用噪声function总共大约需要700-800毫秒。 尽pipe事实上在algorithm中没有明显的昂贵的操作(至less对我来说),但对于产生具有任何体面的速度的地形而言,这至less是一个数量级太慢的速度。 只是楼,模,一些数组查找和基本的算术。 下面列出了algorithm(用Haskell编写)。 SCC的意见是为了分析。 我省略了二维噪声function,因为它们的工作方式是一样的。 g3 :: (Floating a, RealFrac a) => a g3 = 1/6 {-# INLINE int #-} int :: (Integral a, Num b) => a -> b int = fromIntegral grad3 :: (Floating a, RealFrac a) => V.Vector (a,a,a) grad3 = V.fromList $ [(1,1,0),(-1, 1,0),(1,-1, 0),(-1,-1, […]

特征:编码风格对性能的影响

从我读到的Eigen( 这里 )看来, operator=()似乎是懒惰评估的“障碍” – 例如它会导致Eigen停止返回expression式模板并实际执行(优化的)计算,将结果存储在=的左侧。 这似乎意味着一个人的“编码风格”对性能有影响 – 即使用命名variables来存储中间计算结果可能会对性能产生负面影响,因为计算的某些部分“过早” 。 为了validation我的直觉,我写了一个例子,并对结果感到惊讶( 完整的代码在这里 ): using ArrayXf = Eigen::Array <float, Eigen::Dynamic, Eigen::Dynamic>; using ArrayXcf = Eigen::Array <std::complex<float>, Eigen::Dynamic, Eigen::Dynamic>; float test1( const MatrixXcf & mat ) { ArrayXcf arr = mat.array(); ArrayXcf conj = arr.conjugate(); ArrayXcf magc = arr * conj; ArrayXf mag = magc.real(); return mag.sum(); […]

使用ReactJS的优点和缺点

我是使用React进行开发的新手。 有人可以列举使用ReactJS的优点和缺点。 在大型项目中使用此库时是否存在性能问题?

加速CakePHP

我一直是CakePHP的热心粉丝和用户,现在已经有2.5年了,但是大多数开发人员在框架中遇到的主要问题是缓慢,调度周期太长,无法用于生产环境。 我希望这个问题会激发人们分享他们的提示,技巧和黑客来加速CakePHP的性能。 我经常提到的博客post在这里, http: //www.pseudocoder.com/archives/8-ways-to-speed-up-cakephp-apps哪位有很棒的提示,但是一定要有更多! 所以,请随意分享您的想法,使这个更加灵活的优秀框架!

string插值与String.Format

使用string插值之间有一个明显的性能差异: myString += $"{x:x2}"; vs String.Format()? myString += String.Format("{0:x2}", x); 我只是问,因为Resharper提示修复,我以前被骗过。

什么时候VBO比“简单”的OpenGL原语(glBegin())更快?

经过多年的关于顶点缓冲区对象(VBOs)的听取,我终于决定尝试一下(我的东西通常不是性能的关键,显然…) 我将在下面描述我的实验,但是为了简单起见,我在“简单”直接模式(glBegin()/ glEnd()),顶点数组(CPU端)和VBO(GPU端)之间看到了难以区分的性能,渲染模式。 我想明白为什么会这样,在什么样的条件下,我可以期望看到维也纳各组织显着地超越了他们原始的双关语的祖先。 实验细节 对于实验,我生成了大量点的(静态)三维高斯云。 每个点都有与之相关的顶点和颜色信息。 然后,我以相当的“轨道”行为在相继的帧中围绕云端旋转相机。 再次,点是静态的,只有眼睛移动(通过gluLookAt())。 数据在任何渲染之前生成一次,并存储在两个数组中以用于渲染循环。 对于直接渲染,整个数据集呈现在单个glBegin()/ glEnd()块中,每个glColor3fv()和glVertex3fv()都包含一个单独的调用。 对于顶点数组和VBO渲染,整个数据集都是用一个glDrawArrays()调用渲染的。 然后,我简单地运行一分钟左右,然后用高性能定时器测量平均FPS。 性能结果## 如上所述,我的台式机(XP x64,8GB RAM,512 MB Quadro 1700)和我的笔记本电脑(XP32,4GB RAM,256 MB Quadro NVS 110)的性能无法区分。 然而,它的确按照预期的分数进行了缩放。 显然,我也禁用了vsync。 笔记本电脑运行的具体结果(呈现w / GL_POINTS): 在glBegin()/ glEnd(): 1K点 – > 603 FPS 10K – > 401 FPS 100K – > 97 FPS 1M点 – > 14 FPS 顶点数组(CPU端): 1K点 […]

什么时候使用std :: multimap是有意义的

我目前正在尝试使用stl-datastructures。 但是,我仍然不确定何时使用哪一个,何时使用某个组合。 目前我想弄清楚,当使用std::multimap确实有道理。 就我所见,通过组合std::map和std::vector ,可以轻松地构build自己的multimap实现。 所以我留下了这些数据结构应该被使用的问题。 简单性:std :: multimap使用起来更简单,因为不需要处理额外的嵌套。 但是,作为批量元素访问一系列元素可能需要将数据从迭代器复制到另一个数据结构(例如std::vector )。 速度:vector的局部性最有可能使迭代在相等元素的范围上更快,因为caching使用被优化。 不过,我猜测, std::multimaps也有很多优化技巧背后,尽可能快地迭代相同的元素。 同样,正确的元素范围可能会被优化为std::multimaps 。 为了尝试速度问题,我使用下面的程序做了一些简单的比较: #include <stdint.h> #include <iostream> #include <map> #include <vector> #include <utility> typedef std::map<uint32_t, std::vector<uint64_t> > my_mumap_t; const uint32_t num_partitions = 100000; const size_t num_elements = 500000; int main() { srand( 1337 ); std::vector<std::pair<uint32_t,uint64_t>> values; for( size_t i = 0; […]