为什么在 .NET 中分发应用程序的调试版本是一种不好的做法?

2024-03-18

Reading 这个问题 https://stackoverflow.com/questions/5100947/how-can-i-have-different-properties-and-such-in-a-vs-2010-setup-project-for-the-f,在第一条评论中,@Cody Gray 说:

嗯,你知道你不应该 重新分发“调试”版本, 正确的?

我很担心。在 Visual Studio 中,我通常在调试模式下开发应用程序,如果我需要分发可执行文件,我所做的就是压缩.exe并要求.dll文件(在bin\Debug文件夹)。

为什么这是一个坏主意?

这样做与在发布模式下执行完全相同的操作有什么区别?

Edit:
我不久前问过这个问题,但我只是想编辑它以添加差异:

使用时Debug.Assert在代码中进行测试,然后编译发布模式,所有这些线都消失了,所以这可能是另一个区别。


这取决于您使用哪种语言来开发程序。当您使用 C++ 时,您会获得 /RTC 的开销和“编辑 + 继续”支持。它们会大大减慢生成代码的速度,并且如果您使用递归,您的应用程序很可能会在 StackOverflow 上尽早崩溃。如果没有调试器,从检查代码中获得的运行时异常可能很难诊断。

如果您使用 VB.NET,那么当您使用不带调试器的调试版本时,您很容易会出现不可插入的内存泄漏。其“编辑 + 继续”支持代码中的缺陷会导致包含 WithEvents 事件的类的每个实例泄漏 WeakReference。您的应用程序最终会因 OutOfMemory 异常而终止。

如果您使用 C#,那么不会出错,只是 JIT 编译器无法生成优化的机器代码,并且垃圾收集效率不高。您的程序将运行缓慢并且消耗比必要的更多的内存。这也适用于 VB.NET 和 C++/CLI。

程序员在编写代码时通常首先考虑的是性能。因此,发布调试版本有点亵渎。然而,大量程序通常完全受到 I/O、磁盘、网卡或数据库服务器的限制。在这种情况下,原始 cpu 性能并不重要。

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

为什么在 .NET 中分发应用程序的调试版本是一种不好的做法? 的相关文章

  • 应用程序无缘无故地被杀死。怀疑 BSS 高。如何调试呢?

    我已经在CentOs6 6中成功运行我的应用程序 最近 硬件 主板和内存 更新了 我的应用程序现在毫无理由地被杀死 root localhost PktBlaster PktBlaster Killed 文件和 ldd 输出 root lo
  • 如何在 Visual Studio 2010 Professional 中启用代码分析?

    我可以看到我们可以在 Visual Studio Team Systems 中启用代码分析 但我使用的是 Visual Studio 2010 Professional 我们是否可以选择在此版本中启用代码分析 或者我们可以将 FxCop 和
  • 检查应用程序是否从 Visual Studio 调试会话中启动

    我正在开发一个安装系统范围键盘的应用程序 钩 我不想在运行调试时安装这个钩子 从视觉工作室内部构建 否则它会挂起工作室 以及最终的系统 我可以通过检查是否 DEBUG 符号已定义 但是 当我调试时release应用程序的版本是 有一种方法可
  • 如何在 Azure 中仅部署辅助角色/Web 角色

    如果您在 Azure 解决方案中拥有 Web 和辅助角色 那么所有等待发布更新包 上传到云存储 等待包部署的过程可能会让人筋疲力尽 浪费大量时间 如何仅上传 部署包含这两个角色的 Microsoft Azure 解决方案的辅助角色或 Web
  • 从命令行调试 iOS 应用程序构建

    我正在通过命令行构建 iOS 应用程序 但在调试它时遇到问题 如果我使用 XCode 进行构建 它会让我在设备上 构建和调试 而不会出现任何问题 但现在 我不知道如何使用 gdb 在设备上启动它并逐步执行它 如果我尝试 添加自定义目标 可执
  • 如何在没有互联网连接的情况下安装 NuGet 包?

    目前我正在一台不允许访问互联网的虚拟电脑上进行开发 我设法获取 NuGet Tools vsix 将 NuGet 添加到 Visual Studio 2010 但似乎无法找出如何离线部署 NuGet 包 例如 我下载了EntityFrame
  • RMI 中的引用传递问题? [复制]

    这个问题在这里已经有答案了 有人可以告诉我我错在哪里 为什么这个 RMI 聊天应用程序不起作用 目标是通过远程对象或序列化对象实现客户端 服务器和逻辑之间的解耦 import javax swing import java awt even
  • 请参阅 Java EE eclipse 调试中的 POST 参数

    我在调试 Java EE 方面没有经验 我更像是一个 javascript 人 我需要查看哪些 HTTP POST 参数到达服务器端 我在表单将其操作指向的 jsp 文件中放置了一个断点 现在我在调试变量窗口中找不到 POST 内容 他们在
  • 当变量取特定值时如何使 PyCharm 中断?

    我有一本大字典 其中一些元素偶尔会出现非法值 我想弄清楚非法值从何而来 PyCharm 应该不断监视我的字典的值 一旦它们中的任何一个取了非法值 它就应该中断并让我检查程序的状态 我知道我可以通过为我的字典创建一个 getter sette
  • 我可以在我的机器上同时安装 python 2.7 和 3.5 的tensorflow吗?

    目前我通过 Anaconda 在我的机器 MAC OX 上安装了 Python 2 7 Python 3 5 Tensorflow for Python 3 5 我也想在我的机器上安装 Tensorflow for Python 2 7 当
  • 为什么#pragma optimize("", off)

    我正在审查一个 C MFC 项目 在某些文件的开头有这样一行 pragma optimize off 我知道这会关闭所有以下功能的优化 但这样做的动机通常是什么 我专门使用它来在一组特定代码中获得更好的调试信息 并在优化的情况下编译应用程序
  • 接近语法错误(代码1)插入Android SQLite

    我正在创建一个通讯录应用程序 用户可以在其中输入姓名 电子邮件地址和号码 我希望将此数据保存在数据库中 但我似乎无法使插入方法起作用 我收到的错误是 android database sqlite SQLiteException near
  • 安装J语言的JQt IDE,出现错误

    我一直按照这里的说明进行操作 http code jsoftware com wiki System Installation Linux http code jsoftware com wiki System Installation L
  • 识别 Visual Studio 中的重载运算符 (c++)

    有没有办法使用 Visual Studio 快速直观地识别 C 中的重载运算符 在我看来 C 中的一大问题是不知道您正在使用的运算符是否已重载 Visual Studio 或某些第三方工具中是否有某些功能可以自动突出显示重载运算符或对重载运
  • 在远程 Glassfish 上进行日志记录和/或调试

    我有个问题 我在远程 Glassfish 实例上部署了一个 Web 服务 现在我需要一些简单的日志或调试系统来纠正我的代码 使用简单的打印会更好 我的想法是使用 glassfish 日志文件 因为我可以从管理 GUI 访问它 但它不起作用
  • 如何根据“配置管理器”创建自己定义的常量?

    当我选择 调试 配置时 DEBUG常数处于活动状态 当我选择 释放 配置时 DEBUG常量处于非活动状态 我如何创建自己的配置 以便它们包含我自己定义的常量 基本上 我想要这样 如果我选择配置 FOOBAR 就会有一个常量FOO and B
  • 是否可以将 NUnit 与 VB.net Express Edition 集成?哪个是最好的方法?

    我是一名 Java 开发人员 正在为一个小项目学习 VB net 在使用 Java 进行编码时 我们不必过多考虑如何将 IDE 与单元测试框架集成 因为大多数 IDE 已经集成 但是现在我正在开发一个项目 主要要求是使用VB net Exp
  • Visual Studio:如何将图像资源存储为嵌入式资源?

    默认情况下 当您将图像 图标 位图等 作为资源添加到项目中时 该图像的构建行动被设定为None 这样做是因为图像神奇地存储在 resources 文件中 I希望将资源存储为嵌入式资源 我的原因无关紧要 但让我们假装这样我可以在里面看到它们R
  • 是否可以使用 MS Visual Studio 作为 LaTeX 用户的 IDE?

    我是 Microsoft Visual Studio 的忠实粉丝 我喜欢代码折叠 自动完成 自动格式化等等 我想如果我能将 MS Visual Studio 用作 LaTeX 用户的 IDE 就好了 简而言之 可能吗 对于第一步 我认为让我
  • 如何调试 Gulp 任务?

    如何调试我的中定义的 gulp 任务gulpfile js使用诸如 Google Chrome 调试器之类的调试器逐行单步执行任务的代码 对于 Node js 6 3 版本 您可以使用 inspect flag https nodejs o

随机推荐

  • 设计方法:过载与开关?

    关于封装设计的性能和可扩展性 最好是 重载 函数名称 让 Mathematica 根据模式 条件 测试以及系统对定义的排序方式来确定要使用哪个版本 或者使用 Switch 或类似命令 构建单个函数来直接求值 Mathematica 的表达能
  • 使用 Flexbox 垂直居中项目

    我正在尝试使用 CSS 的 flexbox 垂直居中项目 而且 我知道如何使用非供应商前缀的代码来做到这一点 但即使使用供应商前缀 我也无法让它在 Webkit Chrome 中工作 我正在尝试垂直对齐 trigger 中的跨度 这是我的C
  • 更新到 Xcode 10.2 后,构建在 testflight 上黑屏

    我的应用程序完美运行 我已将 Xcode 更新到最新的 10 2 版本 但发生了一些奇怪的事情 与任何更新一样 该应用程序在调试器上运行顺利 完全没有问题 当我将一个版本存档到 testflight 时 该版本显示启动画面 然后进入黑屏 不
  • 如何安装 DB2 ODBC 或 OLEDB 驱动程序

    我已经在 Windows 7 Pro 上安装了 IBM DB2 Database Express 现在 我想创建 C 代码以便在 DB2 表中选择 插入 更新记录 我花了一整天的时间在互联网上搜索有关如何安装 OLEDB 或 ODBC 驱动
  • vue js 2 对表格进行排序

    我有两个关于 vue js 2 的问题和一个小提琴 https jsfiddle net tmun9cxa 1 https jsfiddle net tmun9cxa 1 当您单击列标题时 为什么我的排序不起作用 解决办法是什么 如何让搜索
  • 指定 PHP 代码来选择日期和 3 天前的记录

    我正在尝试从 SQL 表中调用仅 3 天前的数据 我的表中有一个磅日期列 并且是日期格式 我已尝试以下操作 但根本没有从查询中得到任何结果 result mysql query SELECT DATE FORMAT datetime y m
  • Ruby:如何递归查找并删除空目录?

    我正在尝试编写一些 ruby 它会递归地搜索给定目录中的所有空子目录并删除它们 想法 注意 如果可能的话 我想要一个脚本版本 这既是实际需要 也是帮助我学习的东西 In ruby Dir select d File directory d
  • 如果 Ruby 和 Python 都允许猴子修补,为什么 Ruby 中的争议更大?

    在我听说过的许多关于 Ruby 的讨论中 人们都表达了对这种语言的保留意见 猴子补丁问题成为他们最关心的问题之一 然而 我很少听到在 Python 环境中提出相同的论点 尽管它在 Python 语言中也是允许的 为什么会有这样的区别 Pyt
  • 如何从批处理文件执行PowerShell命令?

    我有一个 PowerShell 脚本 用于将网站添加到 Internet Explorer 中的受信任站点 set location HKCU Software Microsoft Windows CurrentVersion Intern
  • 如何声明构造函数?

    当我编译程序时出现以下错误 Microsoft Samples Kinect ControlsBasics SelectionDisplay 不 包含一个带有 2 个参数的构造函数 我可能需要为我创建的新事物声明另一个构造函数 但我不知道该
  • 为什么我在 Python 中得到 hmac 的错误结果,而在 Perl 中却没有?

    我正在尝试使用 sha 512 计算 hmac Perl 代码 use Digest SHA qw hmac sha512 hex key x0b x20 data Hi There hash hmac sha512 hex data ke
  • 是否可以搜索所有 xcodes 日志

    XCode 现在可以方便地保存之前运行的日志 这很棒 有没有办法搜索所有日志 我的用例是我看到了一个特定的错误 但不记得它是在哪个运行中 我需要从日志中找到错误 URL Xcode 将调试日志存储在 Library Developer Xc
  • 如何使用类似 Type() 的语法对 Type* 指针进行值初始化?

    内置类型的变量可以像这样进行值初始化 https stackoverflow com questions 2584213 how to default initialize local variables of built in types
  • 将文件发送到 WiFi 打印机

    我正在开发一个应用程序 在该应用程序中 我通过 IP 地址和端口号 即 txt png jpg doc 将文件从我的手机发送到 WiFi 打印机 它们应该从打印机打印出来 我尝试过以下代码 但它只为我提供 txt 文件的输出 需要进行哪些更
  • finishActivity() - 使用确切的请求代码关闭所有活动

    我是 android 新手 但还在战斗 我决定编写 mp3 播放器 我的一些任务有问题 我想从文件浏览器中选择要播放的文件 它是这样实现的 A类的Activity启动B类的Activity 然后开始了几次B班的活动 每次用startActi
  • 如何使用 HTML5 Canvas 作为 WebGL 纹理

    我想要 为情况 i 设置统一值 将案例 i 的计算着色器渲染为 HTML5
  • 部署没有依赖项的 Scala 二进制文件

    有没有一种简单的方法可以将 Scala Jar 1MB 复制到服务器 然后让 SBT 提取它所需的依赖项 40MB 并运行它 我见过 sbt onejar 和sbt组装 https github com sbt sbt assembly 但
  • jQuery:将 ajaxForm 绑定到通过 .load() 加载的页面上的表单

    我正在使用 jQuery 的 ajaxForm 插件在我的 web 应用程序上提交表单 然而 在应用程序的一部分中 我通过 jQuery 的 load 加载一些带有表单的内容 问题在于我无法让 ajaxForm 绑定到通过 ajax 加载的
  • 如何使用 tar 提取没有文件夹结构的文件

    我有一个具有以下结构的 tar gz 文件 folder1 img gif folder2 img2 gif folder3 img3 gif 我想提取没有文件夹层次结构的图像文件 因此提取的结果如下所示 img gif img2 gif
  • 为什么在 .NET 中分发应用程序的调试版本是一种不好的做法?

    Reading 这个问题 https stackoverflow com questions 5100947 how can i have different properties and such in a vs 2010 setup p