在C中,当编译到x86机器时,我通常会用逻辑表达式替换分支,当速度是最重要的方面时,即使条件很复杂,例如,而不是
char isSomething() {
if (complexExpression01) {
if (complexExpression02) {
if(!complexExpression03) {
return 1;
}
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我会写:
char isSomething() {
return complexExpression01 &&
complexExpression02 &&
!complexExpression03 ;
}
Run Code Online (Sandbox Code Playgroud)
现在显然,这可能更难维护,代码可读性更低,但实际上可能更快.
在使用托管代码(例如C#)时,是否有任何理由采取相同的方式?托管代码中的"跳转"是否昂贵,因为它们处于非托管代码中(至少在x86上)?
我需要找出部署到 SQL Server 数据库的程序集的版本。
我需要通过脚本或其他编程方式来了解是否需要重新部署程序集。
有任何想法吗?
谢谢。
我从去年10月开始观看Microsoft构建大会,我注意到他们宣布,要构建新的Metro风格应用,开发人员可以使用C#编写本机代码。这怎么可能?我只是好奇。C#是否不是设计(作为CLI标准的一部分)首先被编译为中间字节代码然后在虚拟机上运行的?在虚拟机上运行的东西如何称为“本机代码”?
我在两个不同的域中有两台机器.我都安装了VS 2005.我想在它们之间进行远程调试.没有身份验证,这是可能的,但我想调试托管代码.我不想直接调试,因为它真的很糟糕.
当我尝试使用调试器附加时,我收到消息"此工作站与主域之间的信任关系失败".知道怎么克服这个吗?我试过在两台机器上添加相同的本地用户名,但没有运气.
编辑:我在两台机器上都有相同的本地用户.我使用本地用户启动了使用RunAs的VS2005和调试监视器.我在调试机器上打开了Windows审核,我看到VS2005机器的本地用户正在尝试登录.但他失败了,错误0xC000018D(ERROR_TRUSTED_RELATIONSHIP_FAILURE)
我想知道为什么.NET框架不提供任何使用USB驱动程序的托管方法.从我读过的所有内容中,您仍然需要调用Windows API并使用编组和PInvoke以及我们.NET程序员都不想要做的所有垃圾.为什么.NET提供了与串口而不是USB端口通信的方法?现在,USB已经变得越来越广泛地应用于串行端口,是不是将它们整合到框架中?
假设您想编写一个处理大型数据集的高性能方法.为什么开发人员不能开启手动内存管理而不是被迫转向C或C++?
void Process()
{
unmanaged
{
Byte[] buffer;
while (true)
{
buffer = new Byte[1024000000];
// process
delete buffer;
}
}
}
Run Code Online (Sandbox Code Playgroud) language-agnostic garbage-collection memory-management managed-code
如果.net dll包含托管代码和非托管代码,代码将如何转换为CIL以及CLR如何分配和管理内存
我一直在想如果有一种方法可以加速释放.NET中的内存.我正在用.NET创建一个游戏(只有托管代码),不需要重要的图形,但我仍然想要正确编写它,以免失去性能.
例如,为不再需要的对象分配空值是否有用?我在互联网上的一些样本中看到了这一点.
我使用 Microsoft Visual Studio 2012,我想用本机 C++ 编写一个应用程序。我不想使用托管代码 (.NET) 的原因是因为我不希望我的应用程序使用 .NET Reflector 之类的工具反编译回源代码,但如果我仍然可以使用,那就太好了我的应用程序中的 UI(CLR Windows 窗体)。
但是当我将 UI(CLR Windows 窗体)添加到我的 Win32 项目时,会弹出此消息:

这是否意味着从现在开始我的所有项目都不会被编译为本机代码,并且有可能使用 .NET Reflector 之类的工具反编译整个应用程序?
或者它将是“混合”(本机代码 + 托管代码)项目蚂蚁将无法使用诸如 .NET 反射器之类的工具反编译整个应用程序,只有其中负责 UI 的部分?
PS 是的,我知道任何应用程序都可以反编译 (!!!),但我问的是基于 .NET 的应用程序的反编译工具。使用 .NET Reflector,您可以从 .NET 应用程序“取回原始源代码”。所以我的问题是,是否有可能从这个应用程序“取回原始源代码”,或者它会以某种方式“混合”代码(托管 + 本机),并且不可能将它反编译回原始代码像.NET Reflector这样的工具的源代码?
托管语言是为您处理内存清理的语言.
编辑我不是在谈论垃圾收集.我只是想知道那些会free()自动记忆的语言,并且仍然可以编译成机器代码.
managed-code ×10
.net ×4
c# ×3
native-code ×2
bytecode ×1
c#-3.0 ×1
c++ ×1
clr ×1
debugging ×1
frameworks ×1
machine-code ×1
pinvoke ×1
sql-server ×1
usb ×1
wpf ×1