关于C#中 inline 的问题

问题描述

听说C#不支持inline功能,只是代码在被编译成IL后被有限地使用。请问,C#中有没有其它可以提高函数调用的方法?谢谢。

解决方案

解决方案二:
什么叫"提高函数调用"??????你管的事情貌似有点太多了,C#不是不能支持inline是根本没必要去支持.函数调用的开销不知道你测试过没有,如果你能够计时出10万次调用所花的时间,那说明你的机器早该换了...如果一个操作执行10万次的时间都不能被感知,则这个问题应该交给编译器厂商和系统厂商去考虑要不要,而不是我们这些应用一级的人.除非你是在打算自己写一个C#编译器或JIT编译器..
解决方案三:
刚才在我笔记本上测试10万次无法测量.1000万次都不到一毫秒....因此CPU时间问题基本忽略.至于inline带来的另外一个好处大量调用的时候不消耗线程堆栈,在循环时线程堆栈是一进一出的,不会累加,而C++的inline函数是不支持递归的(也就是多次大量调用只能是循环了..).最后剩下的问题就是线程堆栈一进一出是否产生大量内存碎片,这个暂时找不到测量内存碎片的方法....不过不管怎么说,我觉得这个问题对我们可以100%的忽略.
解决方案四:
确实没啥必要,比起.net环境性能,这个是可以忽略的东西.除非ms自己觉得有必要加,作为应用层这块,忽略这东西是实际的。
解决方案五:
看来c++的inline方法已经过时了C#里面的属性调用都推荐实现get,set。这些函数调用的时间已经不是非常重要的事情了。
解决方案六:
内联一般是10句以内或5句以内的吧,编译时会嵌入,c#没有的,c#必竟不太注重或者说不需要太注重这方面的内容吧,内联的好处就是可重用,有效率等,如果要在c#的话,可能你要考虑用别的,如static之类的吧,但我觉得,这点不需要考虑太多,inline只是在非常大的处理才体现优越性,非常大的意思,我想至少要百万千万级别的运算才能体现吧,而普通函数的性能也不一定会很差,只要你多研究一下,都会有好的解决办法的。程序性能优化往往可以从多方面入手
解决方案七:
学习
解决方案八:
不内联,值类型怎么办啊?
解决方案九:
学习了。
解决方案十:
引用5楼ijunxiong的回复:

内联一般是10句以内或5句以内的吧,编译时会嵌入,c#没有的,c#必竟不太注重或者说不需要太注重这方面的内容吧,内联的好处就是可重用,有效率等,如果要在c#的话,可能你要考虑用别的,如static之类的吧,但我觉得,这点不需要考虑太多,inline只是在非常大的处理才体现优越性,非常大的意思,我想至少要百万千万级别的运算才能体现吧,而普通函数的性能也不一定会很差,只要你多研究一下,都……

+1感觉内联函数主要体现在代码结构的优化上效率提升上感觉意义不大了
解决方案十一:
学习了
解决方案十二:
引用1楼syeerzy的回复:

什么叫"提高函数调用"??????你管的事情貌似有点太多了,C#不是不能支持inline是根本没必要去支持.函数调用的开销不知道你测试过没有,如果你能够计时出10万次调用所花的时间,那说明你的机器早该换了...如果一个操作执行10万次的时间都不能被感知,则这个问题应该交给编译器厂商和系统厂商去考虑要不要,而不是我们这些应用一级的人.除非你是在打算自己写一个C#……

怪不得C#程序这么卡呢,每个人都觉得自己做的总分不影响整体效率
解决方案十三:
引用11楼zhangwuji154的回复:

引用1楼syeerzy的回复:怪不得C#程序这么卡呢,每个人都觉得自己做的总分不影响整体效率

这个问题你不能责怪C#,咱只能说,鱼和熊掌不能兼得.要想开发速度快,开发周期短,必然要用成型的库,这些库的定义是个大而全的东西.各方面都考虑到了.比如在执行某些操作的时候会判断是否溢出是否为null是否在什么范围之内等等.当然了如果你自己写效率可能会更高.因为你知道他这个值的范围只会在什么范围内且不会为null就省去了不少判断.但是c#的库不能这么做,必须要做到周全,因为用它的人写的代码不一定会传递给这个方法什么值.就造成了你认为的性能浪费..想要高精度开发请用汇编/C想要高效率开发,请使用新型语言如C#...
解决方案十四:
引用4楼poson的回复:

看来c++的inline方法已经过时了C#里面的属性调用都推荐实现get,set。这些函数调用的时间已经不是非常重要的事情了。

如果getset代码简单,JIT或许会为你内联优化
解决方案十五:
引用楼主yunsongzh的回复:

听说C#不支持inline功能,只是代码在被编译成IL后被有限地使用。请问,C#中有没有其它可以提高函数调用的方法?谢谢。

是提高函数调用性能吗?想明白内联是什么概念你就知道了..可以把代码难度提高,这样效率自然就提高了.比如一个for循环判断某些东西.可以一次在for循环判断10次然后计数器+=10;这样效率更高些.就是这个意思.想要提高效率,且代码又想省.使用goto语句.这个一般人想不到.呵呵悄悄告诉你.详细请看http://msdn.microsoft.com/zh-cn/library/13940fs2(VS.80).aspx?ppud=4goto语句的用法.
解决方案:
晕08年的帖又有人在那挖坟帖了
解决方案:
学习中。

时间: 2024-09-15 13:13:11

关于C#中 inline 的问题的相关文章

C++中inline函数详解_C 语言

本文主要记录了C++中的inline函数,也就是内联函数,主要记录了以下几个问题: 一.C++为什么引入inline函数? 主要目的:用它代替C语言中表达式形式的宏定义来解决程序中函数调用的效率问题. C语言中的宏定义:#define ExpressionName(var1,var2) (var1+var2)*(var1-var2)这种宏定义,它使用预处理器实现,没有了参数压栈.代码生成等一系列得到操作,因此效率很高.但缺点如下: 仅仅是做预处理器符号表中的简单替换,因此不能进行参数有效性的检测

深入C++中inline关键字的使用_C 语言

一.在C&C++中 一.inline 关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义.     表达式形式的宏定义一例:     #define ExpressionName(Var1,Var2) ((Var1)+(Var2))*((Var1)-(Var2))为什么要取代这种形式呢,且听我道来:       1. 首先谈一下在C中使用这种形式宏定义的原因,C语言是一个效率很高的语言,这种宏定义在形式及使用上像一个函数,但它使用预处理器实现,没有了参数压栈,代码生

c++中inline的用法分析_C 语言

在函数声明或定义中函数返回类型前加上关键字inline即把min()指定为内联. inline int min(int first, int secend) {/****/};inline函数对编译器而言必须是可见的,以便它能够在调用点内展开该函数.与非inline函数不同的是,inline函数必须在调用该函数的每个文本文件中定义.当然,对于同一程序的不同文件,如果inline函数出现的话,其定义必须相同.对于由两个文件compute.C和draw.C构成的程序来说,程序员不能定义这样的min(

js中this:js中this的总结

   在面向对象编程语言中,对于this关键字我们是非常熟悉的.比如c++.c#和java等都提供了这个关键字,虽然在开始学习的时候觉得比较难,但只要理解了,用起来是非常方便和意义确定的.javascript也提供了这个this关键字,不过用起来就比经典oo语言中要"混乱"的多了.    下面就来看看,在javascript中各种this的使用方法有什么混乱之处?    1.在html元素事件属性中inline方式使用this关键字:  <div >division ele

JavaScript中this关键字使用方法详解

javascript|关键字|详解 在面向对象编程语言中,对于this关键字我们是非常熟悉的.比如C++.C#和Java等都提供了这个关键字,虽然在开始学习的时候觉得比较难,但只要理解了,用起来是非常方便和意义确定的.JavaScript也提供了这个this关键字,不过用起来就比经典OO语言中要"混乱"的多了.     下面就来看看,在JavaScript中各种this的使用方法有什么混乱之处?     1.在HTML元素事件属性中inline方式使用this关键字:  <div

JavaScript中的this对象使用说明

来看下以下这些情况中的this分别会指向什么: 1.全局代码中的this: 1 alert(this)//window< 全局范围内的this将会指向全局对象,在浏览器中即使window.  代码如下 复制代码 function fooCoder(x) {  this.x = x; } fooCoder(2); alert(x);// 全局变量x值为2 这里this指向了全局对象,即window.在严格模式中,则是undefined. 3.作为对象的方法调用:  代码如下 复制代码 var na

互联网公司招聘web前端笔试题目

随着各大互联网公司设立了Web前端开发工程师.设计工程师等职位,web前端越来越得到互联网企业的认可.而且其重视程度与地位也随着浏览器端的富客户端的体现而日益提高. 眼前对HTML5的未来和走向,业内的预测是会和Flash.Silverlight等相结合,从而取代传统的客户端应用程序.而实现这个目标的客户端核心工作是有Web前端工程师来完成的. 从另一个角度,对于web产品来说,交互和用户体验是产品的第一价值,这部分价值的体现就是在web前端.可以说web前端是一个web产品的长相和谈吐.行为.

泛型编程深入探索(一) 模版高级特性小结

一些基本的模版特性: 非类参数模版 模版所声明的参数可以不是类参数,可以声明的非类参数包括整数(double,float不可以),enum,对象引用或指针. 通过模版嵌套实现类或非类参数载类方法参数上的重载(调用时实现,不在定义时实现) 友元函数模版: 直接举例: template <typename T> friend ostream& operator<< <T>(ostream& os, const T& t){}; 内联模版函数: 模版定

如何解决IE6/IE7不识别display:inline-block属性

ie6,ie7的haslayout属性是个让人头疼的问题.在做导航条的时候,一般会用到ul li结构,大多数时候我们是把li设置为浮动,让其并排显示在同一行.还有一种方法就是设置li为display:inline;这样可以达到同样的效 果,但是问题是inline元素的特性:默认无法设置宽度,高度,以及上下margin,(关于padding,情况有点特殊,在ie6,7中 inline元素是无法设置上下padding的,但是在标准浏览器里面是可以设置上下padding的). 鉴于inline元素的这