C# 创建内联函数和宏

C# 创建内联函数和宏,c#,function,macros,inline,C#,Function,Macros,Inline,我知道这是错误的(试图以C/C++的思维方式用C#编写代码)。 但是是否可以在C#中创建内联函数/内联递归函数(直到第n次调用)/宏 因为如果我打算调用同一个函数1000次,但它是一个简单的函数,那么创建堆栈的开销相当大。。。而且没有必要 在C语言中,我可以使用内联函数。C#中有类似的东西吗 再次。。。我不是说C/C++更好。。。我刚刚接触C,没有人问这些简单的问题…… 最后,在.NET4.5中,CLR允许强制1方法内联 使用价值。也有 在Mono的后备箱中(今天提交) 是的,C#是一种功能强大

我知道这是错误的(试图以C/C++的思维方式用C#编写代码)。 但是是否可以在C#中创建内联函数/内联递归函数(直到第n次调用)/宏

因为如果我打算调用同一个函数1000次,但它是一个简单的函数,那么创建堆栈的开销相当大。。。而且没有必要

在C语言中,我可以使用内联函数。C#中有类似的东西吗

再次。。。我不是说C/C++更好。。。我刚刚接触C,没有人问这些简单的问题……

最后,在.NET4.5中,CLR允许强制1方法内联 使用价值。也有 在Mono的后备箱中(今天提交)

是的,C#是一种功能强大的通用语言,几乎可以做任何事情。虽然内联函数/宏通常不受欢迎,但C#确实提供了多种工具,可以以更简洁、更精确的方式实现这一点。例如,您可以考虑使用模板文件,这些模板文件可以在几乎所有形式的.NET应用程序(Web、桌面、控制台等)中使用(并重用)。

从文章中:

T4模板能为我做什么?

通过组合文本、命令式代码和处理指令,您可以将环境中的数据转换为项目的可构建构件。例如,在模板中,您可以编写一些C#或Visual Basic代码来调用web服务或打开Excel电子表格。您可以使用从这些数据源检索的信息为业务规则、数据验证逻辑或数据传输对象生成代码。编译应用程序时,生成的代码可用


如果您是编程新手,我建议您不要实现模板。在N层应用程序中调试它们并不容易,因为它们是在运行时生成和运行的。然而,这是一个有趣的阅读,并打开了许多可能性

答案应该是:别担心。不需要从微优化开始,除非您已经测试过它,而且它实际上是一个问题。1000个函数调用在它成为某种东西之前算不了什么。这一点主要被一次网络呼叫所掩盖。编写你的程序。对照目标检查绩效。如果性能不够好,请使用探查器找出问题所在

看看1000次,我不会担心的。我经常在紧密的性能循环中深入调用堆栈。编译器会为您进行一些优化,尽管不知道有多少是令人沮丧的。如果我需要比这更好的性能,我不会在堆栈深度上增加一分钱,而是在C++中实现它,然后再靠近硬件。因此,即使没有“强制内联”,编译器仍然可以内联一些函数。你知道在什么情况下我们应该使用“NoInLine”方法选项吗?@Trauer我所熟悉的唯一用法是用于诊断目的,以测试方法是否正在内联,或者内联对性能有什么影响。我知道它在生产应用程序中的用途。@Servy,在某些情况下,编译器将内联作为优化的一部分。。正确的?(无法准确记住,因此确认)
[MethodImplAttribute(MethodImplOptions.AggressiveInlining)] 
void Func()
{
    Console.WriteLine("Hello Inline");
}