首页
学习
活动
专区
圈层
工具
发布

如何在 .NET 库的代码中判断当前程序运行在 Debug 下还是 Release 下

如何在 .NET 库的代码中判断当前程序运行在 Debug 下还是 Release 下 发布于 2018-07-05 11:39...更新于 2018-09-01 00:00 我们经常会使用条件编译符 #if DEBUG 在 Debug 下执行某些特殊代码。...但是一旦我们把代码打包成 dll,然后发布给其他小伙伴使用的时候,这样的判断就失效了,因为发布的库是 Release 配置的;那些 #if DEBUG 的代码根本都不会编译进库中。...然而总有时候希望在库中也能得知程序是 Debug 还是 Release,以便库发布之后也能在 Debug 下多做一些检查。...在我们的使用场景中是取整个托管调用栈的,由于这个方法本身就是托管代码,所以栈中至少存在一个帧;也就是说此方法在我们的场景中是不可能返回 null 的。

2.1K10

Rust赋能前端:为WebAssembly 瘦身

将Rust编译为WebAssembly SIMD 在Fast, parallel applications with WebAssembly SIMD文章中,它介绍了如何将c/c++的代码编译为SIMD...release的默认profiles配置 在Cargo Book[8]中对release的默认profiles配置有相关介绍。...LTO 的配置方法 [profile.release] lto = true 4.4 设置并行代码生成单元 在 Rust 中,代码生成单元(codegen-units) 是编译器将 crate 拆分为多个部分并行处理的机制...4.7 移除 fmt::Debug 在 Rust 中,#[derive(Debug)] 和 {:?} 格式化符号用于调试输出,帮助我们打印结构体和枚举的内部信息。...() 相关的字符串和格式化代码包含在最终的二进制文件中。这会导致二进制文件中存在不必要的占用空间,尤其是在极致优化二进制大小的场景下。

27600
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Mobile_xxx:transformClassesWithJarMergingForRelease‘

    看到错误,我检查了一下项目,原来的项目中的GSON是直接将源码拷贝到了项目中,后来引入了一个第三方的视频监控sdk,我看了一下 这个sdk中也包含这个 一个在项目里面 一个在jar包里面,删除哪个都会引起相关联的错误...3.APK 只会打包到apk文件中,而不参与编译,所以不能再代码中直接调用jar中的类或方法,否则在编译时会报错 4.Test compile Test compile 仅仅是针对单元测试代码的编译编译以及最终打包测试...apk时有效,而对正常的debug或者release apk包不起作用。...5.Debug compile Debug compile 仅仅针对debug模式的编译和最终的debug apk打包。...6.Release compile Release compile 仅仅针对Release 模式的编译和最终的Release apk打包。

    98720

    Android插件化常见冲突解决方案

    在Android组件化和插件化的过程中,经常会遇到狠多的问题,如常见的包依赖冲突,资源文件依赖冲突等问题,当然,在资源文件上面,一些组件化框架已为我们提供了一些资源文件冲突的解决方案。...解决方法也挺简单,就是给每个子模块给资源名添加前缀,具体做法是在每个子模块的build.gradle文件的android块内添加一行代码:resourcePrefix “资源名前缀”。...APK 只会打包到apk文件中,而不参与编译,所以不能再代码中直接调用jar中的类或方法,否则在编译时会报错。...Test compile Test compile 仅仅是针对单元测试代码的编译编译以及最终打包测试apk时有效,而对正常的debug或者release apk包不起作用。...Debug compile Debug compile 仅仅针对debug模式的编译和最终的debug apk打包。

    1.2K40

    关于Nebula3工程的几个编译选项

    研究一下人家是怎么通过编译选项来优化性能的 DEBUG: C++/Code Generation/Enable String Pooling: Yes (/GF) 该选项使编译器能够为执行过程中程序映像和内存中的相同字符串创建单个副本...Extensions (/arch:SSE) 使用流式处理 SIMD 扩展 (SSE)  指令指定生成代码的结构 C++/Code Generation/Floating Point Model: Fast...(/fp:fast) 指定源代码文件中的浮点行为: 在多数情况下,创建执行速度最快的代码 C++/Advanced/Calling Convertion: __fastcall (/Gr) 为除 C+...+ 成员函数和标记为 __cdecl 或 __stdcall 的函数以外的所有函数指定 __fastcall 调用约定 RELEASE: C++/Optimization/Inline Function...扩展 (SSE)  指令指定生成代码的结构 C++/Code Generation/Floating Point Model: Fast (/fp:fast) 指定源代码文件中的浮点行为: 在多数情况下

    66540

    GameEngineArchitecture读书笔记(二)

    这样比较省事, 也比较安全 静态链接通常比较慢(编译时间影响开发效率), 而且EXE也比较大 DLL的话如果不使用interface封装会暴露很多类定义 如果使用C++/CLI的话不能使用静态链接库 Debug...Release能重现而Debug不能重现的BUG通常是变量没初始化 DMP文件可以方便地重现崩溃时的堆栈调用 Coding 代码规范是一个项目/引擎必须制定的东西, C++标准的缺乏造成每人一种风格习惯...CodeReview其实是统一风格习惯的一种有效措施 AtomString/HashString: 这东西本身是为了提高效率而出现的, 但是用不好就会成为影响效率的东西 Endianness: 主机平台跟...Win32是不一样的, 生成二进制格式需要转换 全局static变量的初始化顺序没办法控制, 不过函数里的static变量确可以在调用时初始化, 这样可以解决一部分初始化顺序问题 dbghelp可以通过地址反查代码行..., 对付内存泄露比较方便 SIMD要求128bit对齐的内存, 如XNAMath Exception: 主机平台应该避免使用 有时为了保证稳定性不得不用, 比如美术的编辑工具, 至少要让他们有保存一下的时间

    38350

    多核程序设计的相关基础知识----以误差扩散算法为例

    但是大多数情况下,多个指令流处理多个数据才是更加有效的处理方式。...单指令多数据流机器(SIMD) 几乎所有的计算机都实现了SIMD功能,intel处理器中实现的MMX,SSE,SSE2,SSE3等扩展指令集 说到这里,我就多少说几句,最近在做这方面的优化,发现居然知网上面很多研究...,SIMD编译优化的,其实debug和release下面的程序运行时间差别很大,visual studio默认开启了很多编译优化,如果对c语言的内部函数不是很熟悉,编译成release版本的程序已经是优化的不错了...目前的计算机一般都属于SIMD机器或者MIMD机器,而这两种机器都提供了支持并行执行的硬件特性,因此软件开发人员能够非常方便的利用软件中存在的数据级和任务级并行性来提高程序性能。...虚拟环境:虚拟机和虚拟平台 在现在很多平台上运行的多线程环境其实是基于虚拟机的,并且目前计算的一个重要趋势是虚拟化。

    83450

    Rust 赋能前端:图片OCR识别,以后可以抛弃tesseract了

    效果展示 从上面的gif中我们可以看到,我们在textarea中输入关键字信息(the/rust),然后在等待(7-8秒)后,就会将图片中的关键字信息进行标注处理了。...但是呢,我们还是要新建一个Rust项目,因为在实际应用过程中,我们发现它之前的代码还有改进空间亦或者说是我们还可以对其功能进行丰富。 话不多说,直接开干。...RUSTFLAGS="-C target-feature=+simd128" cargo build --release --target wasm32-unknown-unknown --package...--release --target wasm32-unknown-unknown --package ocr_project RUSTFLAGS="-C target-feature=+simd128...特性,这可以显著提高 WebAssembly 代码的并行处理能力,尤其是在处理图像、音频或其他需要大规模数据处理的场景下。

    61400

    oceanbase源码分析 build.sh --init 执行过程

    其次,在熟悉了 OceanBase 的代码之后,如果有需要,您可以直接在未来的工作中使用我们的代码,或者为 OceanBase 贡献您的代码 今天 分析:执行过程 bash build.sh debug...选择编译模式(debug/release等) ./build.sh debug --make ./build.sh release --make 1. ...编译器版本要求 # GCC版本要求 - 默认支持C++11标准 (代码中 CPP_STANDARD_OPTION=11) - 如果使用-DCPP_STANDARD_20=ON,则需要支持C++20标准的...//$@ 是一个特殊变量,代表脚本运行时传递的所有命令行参数 ↓ parse_args # 设置NEED_INIT=true ↓ do_init # 执行初始化 在 Shell 脚本中,main...在这行代码中,dirname $0 会先被执行,获取脚本的目录路径。 readlink -f: readlink -f 命令返回指定路径的绝对路径。

    23200

    英特尔MKL加速AMD计算可达3倍?AMD Yes

    近日,一个优化 AMD CPU 的帖子在 Matlab 社区引起讨论——通过几行代码,将 AMD CPU 加速 250%,进而帖子作者将方法推广到了其他社区,介绍了更普适性的优化方法。...从 Matlab 优化说起 在此前的研究中,作者在 Matlab 社区发起讨论:如何能够使得 Matlab 在 AMD Ryzen/TR CPUs 使用快速代码路径,从而使得性能提升 250%?...因为 Intel MKL 会使用一个有区分的 CPU 调度器,而鉴于 CPU 对 SIMD 的支持,该调度器并不会使用有效代码路径,但是会基于供应商的字符串查询结果进行操作。...它在 AMD CPU 上运行地非常慢,因为 MLK 使用一种区分性的(discriminative)CPU 调度器,这种调度器不能根据 SIMD 的支持来有效使用代码路径。...然后,在 system environment variables 里键入「MKL_DEBUG_CPU_TYPE=5」。这将会对所有使用 NKL 的实例进行应用。 ?

    2.6K30

    go语言最全优化技巧总结,值得收藏!

    runtime会切换到g0栈中去执行这部分代码,time.Now方法在go中有两次连续的系统调用。 不过,go官方团队的lan大佬已经发现并提交优化pr。...看来,未压缩的debug段不是go自己干的。我们很容易就猜到,由于代码中引入了cgo,可能是c++的链接器没有压缩导致的。 代码引入cgo后,go代码由go编译器编译,c代码由g++编译。...后续由ld链接成可执行文件 所以包含cgo的代码在跨平台编译时,需要更改对应平台的c代码编译器,链接器。...总结:在包含cgo的代码编译时,将ld升级到2.27版本,编译后的体积可以减少约50%。 (六)simd 首先,go链接器支持simd指令,但go编译器不支持simd指令的生成。...目前比较流行的做法是llvm: 用c来写simd相关的函数,然后用llvm编译成c汇编。 用工具把c汇编转换成go的汇编格式,保存为.s文件。 在go中调用.s里的方法,最后用go编译器编译。

    91230

    go语言最全优化技巧总结,值得收藏!

    导语 | 本文总结了在维护go基础库过程中,用到或者见到的一些性能优化技巧,现将一些理解梳理撰写成文,和大家探讨。...runtime会切换到g0栈中去执行这部分代码,time.Now方法在go中有两次连续的系统调用。 不过,go官方团队的lan大佬已经发现并提交优化pr。...看来,未压缩的debug段不是go自己干的。我们很容易就猜到,由于代码中引入了cgo,可能是c++的链接器没有压缩导致的。 代码引入cgo后,go代码由go编译器编译,c代码由g++编译。...总结:在包含cgo的代码编译时,将ld升级到2.27版本,编译后的体积可以减少约50%。 (六)simd 首先,go链接器支持simd指令,但go编译器不支持simd指令的生成。...目前比较流行的做法是llvm: 用c来写simd相关的函数,然后用llvm编译成c汇编。 用工具把c汇编转换成go的汇编格式,保存为.s文件。 在go中调用.s里的方法,最后用go编译器编译。

    88541

    CPU之Profiling

    之前我们介绍了CPU,Cache,主要在原理上理解如何充分调用CPU的性能(Why),接着又学习了SIMD技术,算是在编程层面上发挥CPU的并行计算能力(How)。...Go 作为C++程序,一定要对Release版本进行优化,基于之前的学习,就不解释为何不能用Debug版本了。这里,你就需要让自己的代码具备Release版本下的“调试”能力。...在性能分析的过程中,我们可以怀疑性能瓶颈,但不能相信自己的直觉,特别是当你有很丰富的性能分析经验时,更不能大意。大胆假设,小心验证。...这里不知道你是否发现了一个问题,嗯,我们发布的Release版本一定把要Debug调试信息选项去掉,否则,理论上是可以看到源码,这句话拿走不谢。 通过工具,我们可以很详细的获取时间,但这并不是万能的。...最后给出性能分析的步骤: 明确性能优化的要求 性能分析:找到热点 分析热点,并考虑扩展性等问题 在代码逻辑层面上进行优化 再此进行性能分析 采用并行,向量化,GPU等方式优化 再此进行性能分析 在更底层别进行代码优化

    1.1K30

    CPU SIMD简介

    1996年,Intel针对X86指令集,推出了MMX扩展,这是第一次在商用硬件上支持SIMD技术,1999年,Intel在P3中推出了SSE(Streaming SIMD Extensions),基于128...要点1:20%的代码会消耗掉80%的时间,找到其中计算量最大,复杂度较高的部分,这是我们改造代码的重点。如果我们不确定优化是否有效,那就只能实践出真知。...而SSE主要就是针对计算量较大的部分(图像,神经网络等)的数据并行,因此,我们在代码改造中,要对这类代码重点照顾。...要点3:SSE优化时,时刻提醒自己,这段代码在执行中,是否内存连续,是否有改造空间。...总结 SIMD的介绍就到这里,理论上并不复杂,实践中却需要顾及方方面面的可能点。至此,我们讲了CPU,谈到了Cache在性能优化中的巨大价值,本章学习了SIMD技术对数据并行的改造。

    2.5K30
    领券