Tag: 性能

新(std :: nothrow)与try / catch块中的New

我在学习new之后做了一些研究,与我习惯的malloc()不一样,不会因为失败的分配而返回NULL,并且发现有两种不同的方法来检查new是否成功。 这两种方法是: try { ptr = new int[1024]; } catch(std::bad_alloc& exc) { assert(); }; 和 ptr = new (std::nothrow) int[1024]; if(ptr == NULL) assert(); 我相信这两种方式能达到同样的目的(如果我错了,就纠正我),所以我的问题是: 这是检查new成功的更好select,完全基于可读性,可维护性和性能,而忽视事实上的c ++编程约定。

重新加载configuration,而无需使用ConfigurationManager.RefreshSection重新启动应用程序

有没有人得到这个Web应用程序的工作? 无论我做什么,似乎我的appSettings部分(从web.configredirect使用appSettings文件=“。\ Site \ site.config”)不会重新加载。 我注定不得不重新启动应用程序的情况吗? 我希望这种方法能让我成为一个更高性能的解决scheme。 更新: 通过“重新加载”我的意思是刷新ConfigurationManager.AppSettings,而不必完全重新启动我的ASP.NET应用程序,并不得不承担通常的启动延迟。

在Python中保留内存列表?

当用Python进行编程时,是否可以为列表预留内存,列表中将填充已知数量的项目,以便在构build列表时不会多次重新分配列表? 我查看了Python列表types的文档,并没有发现任何似乎这样做的东西。 然而,这种types的列表build筑出现在我的代码的几个热点,所以我想尽可能高效。 编辑:另外,它甚至是有意义的,像Python这样的语言做这样的事情? 我是一个相当有经验的程序员,但是对于Python来说还是一个新手,并且仍然感觉到它的做事方式。 Python是否内部分配所有的对象在不同的​​堆空间中,破坏了试图最小化分配的目的,还是直接存储在列表中的int,float等原语?

C99 VLA的C ++替代(目标:保持性能)

我将一些C99代码移植到C ++中,这些代码大量使用可变长度数组(VLA)。 我用一个在堆上分配内存的数组类来replaceVLA(堆栈分配)。 性能下降幅度很大,下降了3.2倍(见下面的基准)。 我可以在C ++中使用什么样的VLA快速replace? 我的目标是在重写C ++代码时将性能降到最低。 我build议的一个想法是编写一个在类中包含一个固定大小的存储(即可以堆栈分配)的数组类,并将其用于小型数组,并自动切换到大型数组的堆分配。 我的这个实现是在post的最后。 它工作得很好,但我仍然无法达到原始C99代码的性能。 要接近它,我必须增加这个固定大小的存储( MSL以下)到我不舒服的大小。 我不想在堆栈上分配太大的数组, 即使是那些不需要它的小数组,因为我担心它会触发堆栈溢出。 C99 VLA实际上不太容易这样做,因为它永远不会使用比需要更多的存储空间。 我来到std::dynarray ,但我的理解是,它没有被接受到标准(还?)。 我知道clang和gcc支持C ++中的VLA,但我也需要它与MSVC一起工作。 实际上,更好的可移植性是C ++重写的主要目标之一(另一个目标是将程序本来就是一个命令行工具)编译成可重用的库。 基准 MSL是MSL组大小,高于此大小我切换到堆分配。 一维和二维数组使用不同的值。 原始C99代码:115秒。 MSL = 0(即堆分配):367秒(3.2x)。 1D-MSL = 50,2D-MSL = 1000:187秒(1.63x)。 1D-MSL = 200,2D-MSL = 4000:143秒(1.24x)。 1D-MSL = 1000,2D-MSL = 20000:131(1.14x)。 增加MSL进一步提高了性能,但最终程序将开始返回错误的结果(我认为是由于堆栈溢出)。 这些基准与OS X上的clang 3.7一样,但是gcc 5显示了非常相似的结果。 码 这是我现在使用的“smallvector”实现。 我需要一维和二维vector。 我切换到大小MSL以上的堆分配。 template<typename […]

iOS 5.0中的核心图像filter是否足够快实时video处理?

现在,苹果已经将Core Image框架移植到了iOS 5.0,我想知道:Core Image是否足够快,可以将实时滤镜和效果应用于相机video? 另外,学习iOS 5.0的Core Image框架有什么好的起点?

System.IO.FileSystemWatcher监视networking服务器文件夹 – 性能注意事项

我想观看networking服务器上的文件夹树进行更改。 这些文件都有一个特定的扩展名。 树中有大约200个文件夹,大约1200个文件和我正在观看的扩展名。 我不能写一个服务在服务器上运行(禁止!),所以解决scheme必须是本地的客户端。 及时性并不特别重要。 我可以忍受延迟一分钟或更长时间的通知。 我正在观看创build,删除,重命名和更改。 使用.NET System.IO.fileSystemWatcher会在服务器上创build多大的负载? 10个独立的观察者如何减less正在观看的文件夹/文件的数量? (从700个文件夹减less到200个,从5500个文件减less到1200个)更多的networkingstream量,而不是更less? 我的想法是在服务器上重新安排观看的文件在1树下。 我可能并不总是有这个选项,所以观察者的团队。 我想另一种解决scheme是定期检查,如果FSW在服务器上创build一个不适当的负载,或者如果它不适用于一大堆SysAdmintypes的原因。 有一个更好的方法吗?

jQuery追加一组元素

为了这个问题的目的,可以说我们需要append() 1000个对象到body元素。 你可以这样做: for(x = 0; x < 1000; x++) { var element = $('<div>'+x+'</div>'); $('body').append(element); } 这可以工作,但是对于我来说AFAIK似乎效率低下,这将导致1000个文档重排。 更好的解决scheme是: var elements = []; for(x = 0; x < 1000; x++) { var element = $('<div>'+x+'</div>'); elements.push(element); } $('body').append(elements); 但是,这不是一个理想的世界,并引发错误Could not convert JavaScript argument arg 0 [nsIDOMDocumentFragment.appendChild] 。 我明白append()不能处理数组。 我如何使用jQuery (我知道DocumentFragment节点,但假设我需要使用诸如.css()类的元素上的其他jQuery函数.css()一次性向DOM添加一堆对象以提高性能?

是否有一个java.lang.String的内存有效的替代?

在阅读了这篇测量几种对象types的内存消耗的旧文章之后,我很惊讶地看到在Java中使用了多less内存String : length: 0, {class java.lang.String} size = 40 bytes length: 7, {class java.lang.String} size = 56 bytes 虽然文章有一些技巧,以尽量减less这一点,我没有发现他们完全满意。 使用char[]存储数据似乎是浪费。 大多数西方语言的明显改进是使用byte[]和UTF-8编码,因为只需要一个字节来存储最常见的字符,而不是两个字节。 当然可以使用String.getBytes("UTF-8")和new String(bytes, "UTF-8") 。 即使String实例本身的开销也不见了。 但是,那么你失去了非常方便的方法,如equals() , hashCode() , length() ,… 据我所知,Sun在Strings的byte[]表示方面拥有专利 。 用于在Java编程环境中高效地表示string对象的框架 …这些技术可以实现创buildJavastring对象为适当的单字节字符数组… 但是我没有find该专利的API。 为什么我在乎 在大多数情况下,我不这样做。 但是我使用了大量caching的应用程序,包含大量的string,这些string可以更有效地使用内存。 有人知道这样的API吗? 还是有另一种方法来保持您的内存占用string很小,即使在CPU性能或更丑陋的API的代价? 请不要重复上述文章的build议: 自己的String.intern()的变体(可能与SoftReferences ) 存储一个char[]并利用当前的String.subString(.)实现来避免数据复制(讨厌的) 更新 我运行了Sun当前JVM(1.6.0_10)的文章中的代码。 它取得了与2002年相同的结果。

Jaro-Winkler和Levenshtein距离之间的区别?

我有一个用例,我需要对来自多个文件的数百万条logging进行模糊匹配。 我确定了两个algorithm: Jaro-Winkler和Levenshtein编辑距离。 当我开始探索这两者时,我无法理解两者之间的确切区别。 Levenshtein似乎给出了两个string之间的编辑数量,Jaro-Winkler给出了0.0到1.0之间的匹配分数。 我不明白这个algorithm。 因为我需要使用任何一种algorithm,所以我需要知道algorithm性能的确切区别。

尝试/抓住或validation速度?

我正在使用Python,每当我必须validation函数input时,我认为input工作,然后发现错误。 在我的情况下,我有一个通用的Vector()类,我用了几个不同的东西,其中之一是增加。 它既作为Color()类也作为Vector() ,所以当我向Color()添加标量时,应该将该常量添加到每个单独的组件中。 Vector()和Vector()添加需要按组件方式添加。 这个代码被用于光线跟踪器,所以任何速度提升都很好。 这是我的Vector()类的简化版本: class Vector: def __init__(self, x, y, z): self.x = x self.y = y self.z = z def __add__(self, other): try: return Vector(self.x + other.x, self.y + other.y, self.z + other.z) except AttributeError: return Vector(self.x + other, self.y + other, self.z + other) 我目前正在使用try…except方法。 有人知道更快的方法吗? 编辑:感谢您的答案,我尝试和testing下面的解决scheme,在添加Vector()对象之前专门检查类名称: class Vector: def […]