代码之家  ›  专栏  ›  技术社区  ›  Nima

VS2008中C++程序运行缓慢

  •  1
  • Nima  · 技术社区  · 16 年前

    我有一个用C++编写的程序,它打开一个二进制文件(test .bin),按对象读取它,并将每个对象放入一个新文件(它打开新文件,写入它(附件),然后关闭它)。 我使用fopen/fclose、fread和fwrite。 test.bin包含20000个对象。

    这个程序在Linux下运行,用G++运行1秒钟,在VS2008中运行,用调试/发布模式运行1分钟!

    我之所以不批量执行它们,或者不将它们保存在内存或任何其他类型的优化中,有一些原因。

    我只是想知道为什么窗户下面这么慢。

    谢谢,

    4 回复  |  直到 16 年前
        1
  •  3
  •   please delete me    16 年前

    不幸的是,Windows上的文件访问并不是以其卓越的速度闻名,尤其是当您打开大量文件,并且只读取和写入少量数据时。为了获得更好的结果,解决方案(不是特别有用)是从少量文件中读取大量数据。(或者完全为这个程序切换到Linux?!)

    其他随机建议尝试:

    • 如果你有病毒检查程序,关掉它(我的电脑上有卡巴斯基,写了20000个文件,很快就把它逼疯了)
    • 如果您有一个磁盘,请使用一个NTFS磁盘(FAT32会更糟)
    • 确保不会意外使用文本模式 fopen (容易做的)
    • 使用 setvbuf 增加每个缓冲区的大小 FILE
    • 尝试 CreateFile / ReadFile /等等,而不是 FPEN 还有朋友们,这不会解决你的问题,但可能会减少几秒钟的运行时间(因为stdio函数会做一些你可能不需要的额外工作)
        2
  •  4
  •   Mark Wilkins    16 年前

    我相信当您关闭Windows中的文件时,每次都会将内容刷新到磁盘上。在Linux,我 don't think that is the case . 每次操作的冲洗费用都非常昂贵。

        3
  •  0
  •   Incognito    16 年前

    我认为这与2008年的情况无关。这与Linux和Windows文件系统的不同有关。以及C++如何与两个系统中的文件一起工作。

        4
  •  0
  •   Mike Dunlavey    16 年前

    我在这里看到很多猜测。

    您在VS2008 IDE下运行。你总是可以用“可怜人的剖析者”来发现 确切地 发生什么事。

    在那一分钟,点击“暂停”按钮,看看它在做什么,包括调用堆栈。这样做几次。每一次暂停几乎都是确定的(prob=59/60),以捕捉到它在Linux下做不到的事情。