Sir*_*fus 5 c++ performance loops codeblocks
我用这个标题的意思是,在某些情况下,在构建整个程序之后,它的第一次执行将需要大约 25 秒才能开始(直到第一个 printf 显示在控制台上)。下一次执行几乎立即开始(应该如此)。添加/删除一个空格并再次编译,之后的第一次执行再次极其缓慢。
Weather 我从 IDE (Code::Blocks) 或文件资源管理器中运行它没有任何改变。
但这是“解决”问题的方法:
我写的程序有一个循环,它一直在等待用户输入:
#include <stdio.h>
#include <string>
using namespace std;
int main()
{
    printf("Welcome!\n");
    bool Running=true;
    do{
      char input[256], command[64];
      if(fgets(input, 256, stdin) == NULL || input[0]=='\n')
        continue;
      sscanf(input, "%s", command);
      string command_cppstr(command);
      if(command_cppstr == "help")
      {
        printf("\n");
        printf("help - displays this list\n");
        printf("exit / quit - exits this progam\n\n");
        continue;
      }
      if(command_cppstr == "exit" || command_cppstr == "quit")
      {
        Running = false;
        continue;
      }
      printf("Unrecognized command. Use command \"help\" for a list of commands and their descriptions.\n");
    }while(Running);
    return 0;
}
这个程序有前面提到的问题。但是,如果我做一些保证程序会停止的事情中的任何一件,问题就不会再发生。例如,声明如下:
int i=0;
并在 do while 循环中插入以下内容:
i++;
if(i>4)
  Running=false;
不仅使程序在处理完 4 个命令后停止,它还“解决”了问题——.exe 不再需要永恒的第一次执行时间。我将“解决”放在引号之间,因为我只希望我的程序在用户通过键入命令“退出”或“退出”这样说时停止。
我再次注意到我先编译,等到一切都编译好,然后才运行可执行文件。
我想知道如何避免这种情况,因为即使我找到了部分解决方案,但对我来说并不完全理想。我也想知道是什么导致了这个问题。就好像计算机不愿意运行可能永远不会停止的代码,害怕陷入无限循环 xD。
感谢您对这篇文章的关注,并提前感谢任何试图回答这些问题的人。
编辑:
好的,这是我在阅读答案后到目前为止所尝试的:
我重新激活了卡巴斯基:
卡巴斯基有很多可以禁用的东西,但我认为我尝试过的东西最有可能影响这种情况。但这一定是卡巴斯基的错,因为禁用它解决了问题。我想我会尝试禁用更多的东西......
我还尝试了以下方法:
我将继续尝试改变我增加的方式,以尝试进一步摆脱任何似乎正在检查我的程序是否停止的东西 xD ...我将在进行实验时使用结果对其进行编辑。
我继续尝试在 Kaspersky 中寻找可以解决此问题的方法
显然,禁用防火墙和“应用程序控制”功能可以解决问题。但我想,让计算机在没有防火墙的情况下运行并不是一个很好的交易。
所以我重新启用了这两个功能,在“应用程序控制”中有一个“未知应用程序”的选项,介于
然后有一个盒子说:
确定组的最长时间:<_> 秒。
现在是有趣的部分:此框中的秒数与程序开始运行之前所花费的时间直接相关。(这个时间永远不会大于秒数+~2)
但谜团还没有结束:
最后一行变灰,当我停用启发式分析时,测试框被禁用,这表明当启发式分析被禁用时,将没有等待。但是还有!而且还是和现在不可编辑的文本框的插入时间有关!
哦,为什么防火墙的状态很重要?据说,停用“应用程序控制”将完全解决此问题,但不,防火墙和应用程序控制都必须禁用!
乍一看,这看起来像防病毒软件。每次看到正在运行的新可执行文件时,它都会检查该文件是否有病毒。每当您重新编译时,它都必须再次检查文件,因为它已更改。
但是您对问题的“解决方案”让我感到困惑!你所描述的似乎是不可能的。程序(或操作系统或防病毒软件)如何知道循环次数是有限的?我认为这里有必要进行进一步的实验。
首先,您可以尝试将可执行文件添加到防病毒软件的排除列表中。发生什么了?
| 归档时间: | 
 | 
| 查看次数: | 2537 次 | 
| 最近记录: |