编译后的第一次执行非常慢,除非“明显”所有循环都会停止

2024-04-17

我这个标题的意思是,在某些情况下,构建整个程序后,它的第一次执行将需要大约 25 秒才能开始(直到第一个 printf 在控制台上显示)。接下来的执行几乎立即开始(正如它们应该的那样)。添加/删除一个空格并再次编译,之后的第一次执行再次变得极其缓慢。

我从 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。

感谢您对这篇文章的关注,并提前感谢任何试图回答这些问题的人。


Edit:

好的,这是我在阅读答案后到目前为止所尝试的:

  • 禁用卡巴斯基(我的防病毒软件)-问题就消失了。但这不是一个好的解决方案,因为我不喜欢没有防病毒软件的想法。

我重新激活卡巴斯基:

  • 取消选中“使用启发式分析确定未知应用程序的[限制]组 - 无效”
  • 禁用卡巴斯基的“应用程序控制” - 没有效果
  • 禁用卡巴斯基的“系统监控” - 没有效果
  • 禁用卡巴斯基“Antivirus de MI”(似乎与聊天室相关的东西)-没有效果
  • 禁用“漏洞验证设置”中的“验证范围” - 无效
  • 在卡巴斯基应用程序控制中赋予程序可信状态 - 无效
  • 将程序放入卡巴斯基的卡巴斯基排除列表中 - 没有效果
  • 将 code::blocks 放在卡巴斯基的卡巴斯基排除列表中 - 没有效果

卡巴斯基中有很多可以禁用的功能,但我认为我尝试过的最有可能影响这种情况。但这肯定是卡巴斯基的错,因为禁用它解决了问题。我想我会尝试禁用更多的东西......

我还尝试了以下方法:

  • 将 i++ 与我声明的函数交换(我通过引用和增量传递) - 无需等待
  • 将 i++ 与我声明的函数交换(函数返回参数+1) - 无需等待
  • i 从 1 开始,每次循环时乘以 2。当大于8时,Running=false——不等待
  • i 从 0 开始,每次循环时乘以 2。当它大于 8 时,Running=false - 等待(因为这不能保证会停止 xD)

我将继续尝试改变我增加的方式,以尝试进一步摆脱任何似乎正在检查我的程序是否停止的事情 xD...我将在进行实验时使用结果进行编辑。


我继续尝试在卡巴斯基中寻找可以解决这个问题的方法

显然,禁用防火墙和“应用程序控制”功能可以解决问题。但我想,让计算机在没有防火墙的情况下运行并不是一件好事。

所以我重新启用了这两个功能,在“应用程序控制”中有一个“未知应用程序”的选项,介于

  • 使用启发式分析来确定群体(即“可信度”)’
  • 自动将应用程序放入以下组:[您可以在 3 个可信度组之间进行选择的框]

然后有一个框写着:

确定组的最长时间:<_> 秒。

现在这是有趣的部分:此框中的秒数与程序开始运行之前所需的时间直接相关。 (这个时间永远不会大于秒数 + ~2)

但谜团还没有结束:

最后一行变灰,当我停用启发式分析时,测试框被禁用,这表明当禁用启发式分析时,将无需等待。但是还有!而且它仍然与插入到现在不可编辑的文本框中的时间有关!

哦,为什么防火墙的状态很重要?据说,只要停用“应用程序控制”就可以解决此问题,但不行,防火墙和应用程序控制都必须禁用!


乍一看,这看起来像防病毒软件。每次它看到一个新的可执行文件正在运行时,它都会检查该文件是否有病毒。每当您重新编译时,它都必须再次检查文件,因为它已更改。

但你对问题的“解决方案”让我感到困惑!你所描述的似乎是不可能的。程序(或操作系统、防病毒软件)如何知道循环次数是有限的?我认为这里需要进一步的实验。

首先,您可以尝试将可执行文件添加到防病毒软件的排除列表中。会发生什么?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编译后的第一次执行非常慢,除非“明显”所有循环都会停止 的相关文章

随机推荐

  • Xcode 7 在创建新文件时崩溃

    我有 El Capitan GM 并且我已将 Xcode 更新为 Xcode 7 GM 现在我无法创建新类 Xcode 崩溃并显示消息 UNCAUGHT EXCEPTION NSInvalidArgumentException NSOpen
  • 在nifi中将JSON转换为CSV

    我想在 nifi 中将 JSON 文件转换为 CSV 我们可以用 Python 和其他编程语言来实现这一点 并且有多篇文章介绍它 我有多个 JSON 文件 每个文件都有不同的架构 一个特定文件只有一个架构 我可以看到有一些模板可以将 CSV
  • 项目“ ”的目标位置已存在,无法移动项目

    当我尝试与 git 存储库共享我的项目时 出现这样的异常 项目的目标位置 已存在 无法移动项目 写一个答案是因为我尝试了许多类似问题中建议的许多选项 但没有一个起作用 然后我按照以下有效步骤手动完成了此操作 并且这些步骤适用于任何 Ecli
  • 使用正则表达式查找有效的 IP 地址

    我有以下字符串 text 10 0 0 1 1 but 127 0 0 256 1 1 1 1 我想返回有效的IP地址 所以它应该只返回1 1 1 1自从这里256高于255并且第一个IP编号过多 到目前为止 我有以下内容 但它不适用于0
  • 抽象与抽象类

    根据http www cs cornell edu courses cs211 2006sp Lectures L08 abstraction 08 abstraction html http www cs cornell edu cour
  • 为什么 TableAttribute 位于实体框架 Dll 中?

    Table 属性 可用于将 POCO 类映射到正确的数据库名称 架构 位于 EntityFramework dll 中是否有充分的理由 这是否会阻止您创建一个仅包含您的实体而不依赖于特定数据访问技术的域项目 例如 如果我使用此属性 我不相信
  • CLGeocoder 返回其他国家/地区的位置

    我有以下代码 CLGeocoder geo CLGeocoder alloc init CLRegion region CLRegion alloc initCircularRegionWithCenter CLLocationCoordi
  • 在Sandbox中使用Cocoa NSSavePanel导致断言失败

    我正在尝试使用 NSSavePanel 并将这一行添加到我的代码中 let test NSSavePanel 每次调用此代码时都会出现此错误 我不太确定这里发生了什么 因为我只是创建一个新对象 任何帮助表示赞赏 谢谢 Assertion f
  • 如何在 MVC Core 和 AutoFac 中使用属性注入

    我可以在 MVC Core 中轻松使用构造函数参数注入 但不支持属性注入 我尝试使用 AutoFac 但也失败了 那么如何在MVC Core中使用属性注入 这是 AutoFac 的代码 services AddMvc ContainerBu
  • 使用 Linkify Android 打开 Activity

    我想在用户使用 linkify 单击 textView 时打开 Activity 这是我的代码 Pattern tagMatcher Pattern Compile A Za z0 9 Scheme for Linkify when a w
  • C++ 中的 malloc/free 和 new/delete 兼容性?

    malloc free 和 new delete 有一个很好的比较here https stackoverflow com questions 240212 what is the difference between new delete
  • 致命错误:netinet/in.h:没有这样的文件或目录

    套接字编程 UDP 服务器 我正在尝试使用 UDP 服务器进行消息加密和解密 代码在这里 https www geeksforgeeks org message encryption decryption using udp server
  • 创建一个 python 脚本来安装 python 模块并运行一些命令

    我想围绕这个库创建一个薄包装https github com jupyter incubator sparkmagic installation https github com jupyter incubator sparkmagic i
  • Django - ImportError:无法导入名称 Celery

    这是我第一次使用 celery 我完成了这个教程 将 celery 与 Django 一起使用 http docs celeryproject org en latest django first steps with django htm
  • 如何解码哈希

    如果攻击者可以访问用户的数据库并且密码存储在哈希值中 攻击者可以解码该哈希值吗 您能推荐任何可以解码哈希值的工具吗 您可以在这里找到更多详细信息 http crackstation net hashing security htm http
  • C#/WPF:如何单独显示 ListView 的最后一行?

    我有一个 ListView 其中包含大约 10 个 GridViewColumn 和大约 100 行 行 我想在 ListView 的底部显示 总计 或摘要行 有谁知道如何做到这一点 保持 ColumnWidth 等像其他一样并将其作为一个
  • 在 UITextview 中加载巨大的文本文件会崩溃

    我想更新 UITextView 中的一个巨大的文本文件 但设备有时会挂起或崩溃 文本文件大小为 4MB UITextView 是从 Interface Builder 添加的 我正在从文档目录加载文件 以下是加载文本文件的代码 NSErro
  • 如何从函数返回值 - React Native

    如何从反应本机函数返回布尔值 它可以这样完成 export function isJson str try JSON parse str catch e return false return true 该函数检查提供的值是否有效JSON
  • 检查标准输入缓冲区是否为空

    我正在尝试用字符读取数字字符 但我不知道标准输入缓冲区是否为空 我的第一个解决方案是寻找 n标准输入缓冲区中的字符 但是如果我要输入由分隔符分隔的多个数字 这就没用了 我如何知道标准输入缓冲区中是否有字符 我需要用 C 语言来完成它并且是可
  • 编译后的第一次执行非常慢,除非“明显”所有循环都会停止

    我这个标题的意思是 在某些情况下 构建整个程序后 它的第一次执行将需要大约 25 秒才能开始 直到第一个 printf 在控制台上显示 接下来的执行几乎立即开始 正如它们应该的那样 添加 删除一个空格并再次编译 之后的第一次执行再次变得极其