Articles of 性能

是否有可能加快python IO?

考虑这个python程序: import sys lc = 0 for line in open(sys.argv[1]): lc = lc + 1 print lc, sys.argv[1] 在我的6GB文本文件上运行,大约在2分钟内完成。 问题: 可以加快吗? 请注意,同一时间需要通过: wc -l myfile.txt 所以,我怀疑我的问题只是一个普通的“不”。 还要注意,我的真正的程序正在做一些比计算线更有趣的东西,所以请给出一个通用的答案, 而不是行计数技巧(如保持文件中的行数元数据) PS:我标记了“linux”这个问题,因为我只对linux特定的答案感兴趣。 如果你有它们,可以随意给OS-agnostic,甚至是其他OS的答案。 另见后续问题

上下文切换的开销是多less?

本来我认为上下文切换的开销是TLB被刷新。 不过,我刚刚在维基百科上看到: http://en.wikipedia.org/wiki/Translation_lookaside_buffer 2008年,Intel(Nehalem)[18]和AMD(SVM)[19]都将标签作为TLB条目的一部分,并在查找期间检查标签。 尽pipe这些标签没有被充分利用,但是可以预见,将来这些标签将识别每个TLB条目所属的地址空间。 因此,上下文切换不会导致TLB的刷新 – 而只是将当前地址空间的标记更改为新任务的地址空间的标记。 上述情况是否确认新的Intel CPU不会在上下文切换时刷新TLB? 这是否意味着在上下文切换中没有真正的开销? (我想了解上下文切换的性能损失)

IPC的性能:命名pipe道与套接字

每个人似乎都认为命名pipe道比套接字IPC更快。 他们快多less? 我更喜欢使用套接字,因为它们可以进行双向通信,而且非常灵活,但是如果数量相当多的话,它会select速度而不是灵活性。

File.Copy与手动FileStream.Write复制文件

我的问题是关于文件复制性能。 我们有一个媒体pipe理系统,需要在文件系统上的大量移动文件到不同的位置,包括在同一networking上的Windows共享,FTP站点,AmazonS3等。当我们都在一个Windowsnetworking上,我们可以逃脱使用System.IO.File.Copy(源,目标)复制文件。 由于很多时候我们只有一个inputstream(就像一个MemoryStream),所以我们尝试抽象复制操作来获取一个inputstream和一个输出stream,但是我们看到一个巨大的性能下降。 下面是一些复制文件的代码作为讨论点。 public void Copy(System.IO.Stream inStream, string outputFilePath) { int bufferSize = 1024 * 64; using (FileStream fileStream = new FileStream(outputFilePath, FileMode.OpenOrCreate, FileAccess.Write)) { int bytesRead = -1; byte[] bytes = new byte[bufferSize]; while ((bytesRead = inStream.Read(bytes, 0, bufferSize)) > 0) { fileStream.Write(bytes, 0, bytesRead); fileStream.Flush(); } } } 有谁知道为什么这个performance比File.Copy慢得多? 有什么我可以做的改善performance? 我只需要把特殊的逻辑,看看我是否从一个窗口位置复制到另一个 – […]

Windows C ++纳秒时序?

有没有在Windows上的C + +的方式来测量纳秒时间? 我只能findLinux解决scheme。

为什么窗口第一次打开文件的速度太慢了,还有更快的方法

这是Windows 7,64位,专业使用 考虑一个非常简单的循环 for (i = 0; i < names->size(); i++) { std::string Name = names->at(i); HANDLE fileHandle = CreateFile(Name.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); if (fileHandle == INVALID_HANDLE_VALUE) { throw "Failed"; } CloseHandle(fileHandle); } 如果我在一个有863个文件的目录上运行它,它会稍微超过22秒,或25毫秒/文件。 下一次169毫秒或0.19毫秒/文件。 如果我只是使用find_file的时间,新鲜的目录是非常快的,约0.2毫秒/文件。 虽然我在这里使用了CreateFile,但其他方法的结果相同。 当然,答案是文件caching:Windows必须caching关于文件打开的信息。 而且,它必须是磁盘访问,就像目录在SSD上一样,第一次和第二次打开大致相同。 现在这些硬盘上的查找时间只有9毫秒,所以有人知道WINDOWS在25毫秒的时间里只有在没有读数的情况下打开/closures一个文件才能读取。 但更重要的是,是否有可能加快速度。 你可能会说25 ms很快,但是我正在播放video文件,所以我需要在33 ms左右读取数据,实际读取的数据在30 ms范围内,所以打开成本太高。 任何build议如何快速打开* *文件的负载,将不胜感激。

Windows上的Python性能

在Windows上,Python通常比* nix机器慢一些? Python似乎在我的Mac OS X机器上大放异彩,而我的Window的Vista机器似乎运行速度较慢。 机器处理能力相似,Vista机器有1GB的内存。 我在Mercurial中特别注意到了这一点,但我想这可能只是Mercurial如何在Windows上打包。

我可以使用哪些工具来确定应用程序的硬件要求?

对于普通读者:传奇™继续… 我的应用在我的开发机器上运行良好 – 这是5年前购买的一款相当不错的游戏装备。 因此,这是64位,具有2.2GHz的时钟速度和2GB的内存。 但是,工作的机器是标准的戴尔问题办公室电脑,甚至很难启动我的应用程序,更不用说运行它了。 ( 解释…我可以想象,人们对我尖叫:“你究竟在做什么来要求这样的规范?”那么,我正在做大量的实时图像分析和audio生成。 我们的团队有预算购买专用笔记本电脑(需要便携式)来运行它。 所以现在我已经负责生成一个最低要求的规格。 我可以使用哪些工具来确定能够舒适地运行我的应用程序的最低规格? 更新:到目前为止,答案虽然有用,但更侧重于分析的替代scheme。 所以我已经提出了一个赏金,看是否有任何软件会做这种事情。

Windows和Linux中的Hashlib

我正在Python中编写一个p2p应用程序,并使用hashlib模块来识别networking中具有相同内容但名称不同的文件。 问题是我用Python 2.7testing了Windows(Vista)中的文件的散列码,速度非常快(不到一秒,几千兆字节)。 所以,在Linux(Fedora 12,Python 2.6.2和Python 2.7.1由我自己编译,因为我没有find与yum rpm)是慢得多,几乎一分钟的文件小于1GB。 问题是, 为什么? 我可以做些什么来提高Linux的性能? 散列的代码是 import hashlib … def crear_lista(directorio): lista = open(archivo, "w") for (root, dirs, files) in os.walk(directorio): for f in files: #archivo para hacerle el hash h = open(os.path.join(root, f), "r") #calcular el hash de los archivos md5 = hashlib.md5() while True: trozo = h.read(md5.block_size) […]

有效的线程数

我想优化我的应用程序线程数量。 几乎所有的CPU都有相同的IO值。 在系统中没有其他应用程序运行时,线程的有效数量是多less。 我想要Windows和JVM下的答案。