梦见别人给我介绍对象il子对象黄了

【JUNGilwoo☆代发】110119沆姐▼:我前天梦见他了..._郑日宇吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:24,685贴子:
【JUNGilwoo☆代发】110119沆姐▼:我前天梦见他了...收藏
沆姐▼ :以前看电视的时候对他印象倒不怎么样 突然就梦见他了 梦里他说喜欢我~我顿时就爱上他了~我要进入卡魔大部队啦 欢迎下~
“健康随e保”可保障儿童41种重大疾病。150元起/年,给孩子45万高额保障。
欢迎亲早日加入啊
沆姐▼欢迎欢迎啊亲的梦很美但亲的处境很险当心小宇老婆、内人等等向你扔板砖
&& 等等来了
呵呵…宝宝跑得好快!我原来生病的时候连续两天都梦到他了
欢迎沆姐▼欢迎加入卡魔大家庭
&& 有人跟我抢男人呀&& 必须得跑快点&& 不然被抢走了咋整&&& 噗哈哈哈哈
回复:7楼我要楼上的这种签
&& 你可以选择现在就扯走&& 或者等我星期五回家了给你特别制作一下
宅男diao丝,射杀女神?这游戏你玩过没
不客气的宝石一枚
呵呵,我昨晚也梦见小宇了,可是今早起来后就记不清楚跟他说了些什么了。反正他没有说喜欢我啊,呵呵。小宇这么多内人啊,看来我只有当小宇的丫鬟了,呵呵
回复:12楼当备胎还是比较明智的选择
天天都有梦见小宇呢
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或我又梦见四个宝贝了_il吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:1,285贴子:
我又梦见四个宝贝了收藏
梦里的我,傻乎乎地拿着一个本子,要他们每个人给我写一句话,英文的。记得URS给我写了句他们唱的歌词,温暖得我当时眼睛湿湿的。SEB和CARLOS也给我写了,很KIND的眼神儿。只有DAVID顽皮,就不给我写,但是给我签了个名,我再次要求他写的时候,这个小坏蛋,一个劲儿提醒我,我刚写完,就是我的名字。这个美丽的梦,拌我一夜好心情。都说人生如梦,我觉得不是。梦大多和现实是反的,梦见不好的,反而会更幸福。而且再糟糕的梦,醒来后,知道是反的,也就舒心了,可是真正的人生,太多波折,我好累,和疾病战斗得好累。
“健康随e保”可保障儿童41种重大疾病。150元起/年,给孩子45万高额保障。
快试试吧,可以对自己使用挽尊卡咯~◆◆
哇&&好幸福啊&&不过你生病了&怎么了&&&&我是新来的&&&&叫Sun&&喜欢D
谢谢SUN关心,我的病是慢性长期的,命不好,两个巨大问题。熬着过吧。呵呵,可能DAVID&要把给DIVA写一句话的机会留给你呢。
快试试吧,可以对自己使用挽尊卡咯~◆◆
呵呵&&别说命不好&&&我看过1个电影&&&&&&&她比烟花寂寞&&那里面有首诗&&最后1句是&&1切都会称心如意的&&你应该会喜欢那个电影&&&说的是德国著名女大提琴家杰奎琳的故事
快试试吧,可以对自己使用挽尊卡咯~◆◆
我可不仅仅满足他给我写句话啊&&&&&&&嘿嘿
快试试吧,可以对自己使用挽尊卡咯~◆◆
我很想操LZ的妈
LS出门右转。这儿不欢迎你。
谢谢ISHIDA,那是我们吧里唯一的不和谐音,我看到的时候,很别扭,因为是回复我的帖子的。唉,世事难求完美啊!
回复:8楼咳咳,别理这种人,简直就是NC。淡定淡定。这种无聊的人多了……
谢谢ISHIDA小宝贝,我被耶稣教过了,倒是不怕被别人骂,只是难过,我们的吧里终于有了不和谐音,还是被我的帖子引起的,觉得对不起大家。
il试剂盒能在组织培养基,组织匀浆,脑脊液及其它样品中,选择性地定量天然和重组Aβ40.立即点击了解更多!
回复:10楼这并不是你的错误,这样的人在网上很多。骂人和对骂什么的层出不穷。没有和谐的地方~~~~
多谢小ISHIDA的安慰和解释,无论如何我心领。
给DRASOR,我得病不能靠音乐恢复,但是还是好感谢你的。其实比你想的更严重,我为此和死神拉了五次手了。所以CECI姐姐总说我,说话老气横秋的。呵呵!我不介意。我知道她很疼我的。包括小ISHIDA都很善良很懂疼我得。
多谢DRASOR,我可能还有几个生死关要过。不过,过习惯了,也不是很怕了!好在还有爱我的亲人和爱人。
回复:16楼你是什么病?我也是慢性病。。。。而且我也喜欢IL DIVO。。。有时间咱俩交流交流
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或昨晚梦见一个神奇的人(我保证这和四只有关••&#x2022_il吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:1,285贴子:
昨晚梦见一个神奇的人(我保证这和四只有关••&#x2022收藏
我梦见我在看一个歌唱比赛,有一个男人唱先生们的with you i'm born again,我和我同学说”咦那不是四个人的歌吗怎么一个人唱?”结果那个人好厉害,唱谁的像谁!更神奇的是一个人还能唱副歌有合声!我都惊讶了~然后我再抬头就看到一个特像CC的人站在前面唱,我激动的爬上舞台•••后面忘了= =
“健康随e保”可保障儿童41种重大疾病。150元起/年,给孩子45万高额保障。
是的是的!!!!!太能理解我了!!!!
人少玩不了队型...
看来你的心底深处是把他们看成一个不可分割的整体的.也许会这样的喔
严重同意一次!
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或posts - 127,&
comments - 276,&
trackbacks - 0
1.创建对象的方式     作为入门的第一篇,先从最简单的创建对象开始吧。     首先,回顾一下,在c#中如何创建某个类型的对象,最基础的当然是使用new关键字,例如:new object(),当然这个方式也有缺点,那就是编译时必须明确的知道类型(也就是这里的object)。     如果编译时不知道类型,但运行时却知道具体类型,那怎么帮哪?     第一个相到的当然是使用Activator.CreateInstance方法,例如:static void Main(string[] args)
Type type = typeof(object);
Console.WriteLine(Create(type));
static object Create(Type type)
return Activator.CreateInstance(type);
    或者使用泛型的重载:static void Main(string[] args)
Console.WriteLine(Create&object&());
static T Create&T&()
return Activator.CreateInstance&T&();
    当然,这里的type或者T都必须有默认构造函数,否则将会出现运行时错误。
    第二个方式是采用泛型约束new(),例如:static void Main(string[] args)
Console.WriteLine(Create&object&());
static T Create&T&() where T : new()
return new T();
    当T不具备一个默认构造函数时,编译时将会报错。
    当然,还有第三种方式——反射,例如:static void Main(string[] args)
Console.WriteLine(Create(typeof(object)));
static object Create(Type type)
var ctor = type.GetConstructor(Type.EmptyTypes);
return ctor.Invoke(new object[0]);
2.性能对比
    当然这三种方式的性能各有不同,第三种反射的方式,拥有最差的性能,泛型的new约束在T为引用类型时,编译器将new T()自动转换为Activator.CreateInstance&T&的调用,而T为值类型的情况下,效率及高。Activator.CreateInstance的两个重载的效率取决于调用次数和非泛型版的缓存命中率,当调用次数足够多的时候,并且大量命中的情况下非泛型版具有相对较高的效率,也就是说非泛型版的在缓存不命中的情况下需要较高的代价,但是缓存命中的情况下,却可以拥有相对较小的代价,测试代码如下:Type t = typeof(object);
var sw = new Stopwatch();
int count = 1; // 10, 100, 1000
sw.Start();
for (int i = 0; i & i++)
Activator.CreateInstance(t);
Console.WriteLine("Method:CreateInstance, Count:{0}, Tick:{1}",
count.ToString(), sw.ElapsedTicks.ToString());
sw.Reset();
sw.Start();
for (int i = 0; i & i++)
Activator.CreateInstance&object&();
Console.WriteLine("Method:CreateInstance&T&, Count:{0}, Tick:{1}",
count.ToString(), sw.ElapsedTicks.ToString());
    为了避免被非泛型版缓存,需要每次重新执行,可以看到运行结果如下:
Method:CreateInstance, Count:1, Tick:1399Method:CreateInstance&T&, Count:1, Tick:42
Method:CreateInstance, Count:10, Tick:3009Method:CreateInstance&T&, Count:10, Tick:112
Method:CreateInstance, Count:100, Tick:3343Method:CreateInstance&T&, Count:100, Tick:820
Method:CreateInstance, Count:1000, Tick:4092Method:CreateInstance&T&, Count:1000, Tick:7989
    很容易发现泛型版的代价相当的稳定,除了第一次外,每次调用的代价约8-10个Tick,而非泛型版的代价则变化很大,100次调用的代价中前10次调用的就占有了90%(事实上是前2次),但是之后的代价明显下降,但是与直接new object()相比,代价还是比较大。
    回到主题IL,如果采用Emit,能不能进一步提高性能哪?那么首先,需要用Emit来写一个创建对象的方法,但是,不会怎么写办?
    好吧,现在是工具出场的时候了,首先是c#编译器,写上一个方法,例如:static object MyCreateInstance()
return new object();
    然后编译(本文中所有的编译均使用Release方式),这样可以获得一个dll或者exe文件,然后,轮到reflector出场了,打开这个文件,找到类和方法,反编译的语言选择为IL,这样就可以获得下面的内容:.method private hidebysig static object MyCreateInstance() cil managed
.maxstack 8
L_0000: newobj instance void [mscorlib]System.Object::.ctor()
L_0005: ret
    还是觉得无从下手?好吧,可以到下载一些reflector的插件,例如:,加载插件后,reflector就会多一个语言选择:Reflection.Emit,选择该语言后,就可以看到:public MethodBuilder BuildMethodMyCreateInstance(TypeBuilder type)
// Declaring method builder
// Method attributes
System.Reflection.MethodAttributes methodAttributes =
System.Reflection.MethodAttributes.Private
| System.Reflection.MethodAttributes.HideBySig
| System.Reflection.MethodAttributes.S
MethodBuilder method = type.DefineMethod("MyCreateInstance", methodAttributes);
// Preparing Reflection instances
ConstructorInfo ctor1 = typeof(Object).GetConstructor(
BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic,
new Type[]{
// Setting return type
method.SetReturnType(typeof(Object));
// Adding parameters
ILGenerator gen = method.GetILGenerator();
// Writing body
gen.Emit(OpCodes.Newobj, ctor1);
gen.Emit(OpCodes.Ret);
// finished
}    不过,这个是生成类型的方法,现在需要的仅仅是生成一个方法,稍微来改造一下吧:static Func&object& BuildMethodMyCreateInstance()
DynamicMethod dm = new DynamicMethod(string.Empty, typeof(object), Type.EmptyTypes);
var gen = dm.GetILGenerator();
gen.Emit(OpCodes.Newobj, typeof(object).GetConstructor(Type.EmptyTypes));
gen.Emit(OpCodes.Ret);
return (Func&object&)dm.CreateDelegate(typeof(Func&object&));
    这样,就用一个Func&object&包装了刚才的MyCreateInstance方法的内容,来看看能不能正常工作:Func&object& func = BuildMethodMyCreateInstance();
Console.WriteLine(func());
    看看运行结果:
System.Object
    工作的不错,但是问题来了,我们要的不是一个简单到只能创建object的方法,需要的是一个能传入类型的,并且能创建出这个类型的对象的方法,所以,需要进一步改进:static Func&object& BuildMethodMyCreateInstance(Type type)
DynamicMethod dm = new DynamicMethod(string.Empty, typeof(object), Type.EmptyTypes);
var gen = dm.GetILGenerator();
gen.Emit(OpCodes.Newobj, type.GetConstructor(Type.EmptyTypes));
gen.Emit(OpCodes.Ret);
return (Func&object&)dm.CreateDelegate(typeof(Func&object&));
    加了个参数,小改了一下,来看看测试吧:Func&object& func = BuildMethodMyCreateInstance(typeof(object));
Console.WriteLine(func());
    输出:
System.Object
    很好,接下来我们进一步测试一下。
4.性能对比(二)
    把测试方法来修改一下,加入Emit和直接早期绑定的性能测试:Type t = typeof(object);
var sw = new Stopwatch();
int count = 1; // 10, 100, 1000
sw.Reset();
sw.Start();
for (int i = 0; i & i++)
Activator.CreateInstance(t);
Console.WriteLine("Method:CreateInstance, Count:{0}, Tick:{1}",
count.ToString(), sw.ElapsedTicks.ToString());
sw.Reset();
sw.Start();
for (int i = 0; i & i++)
Activator.CreateInstance&object&();
Console.WriteLine("Method:CreateInstance&T&, Count:{0}, Tick:{1}",
count.ToString(), sw.ElapsedTicks.ToString());
sw.Reset();
sw.Start();
Func&object& func = BuildMethodMyCreateInstance(t);
for (int i = 0; i & i++)
Console.WriteLine("Method:MyCreateInstance, Count:{0}, Tick:{1}",
count.ToString(), sw.ElapsedTicks.ToString());
sw.Reset();
sw.Start();
for (int i = 0; i & i++)
new object();
Console.WriteLine("Method:new object(), Count:{0}, Tick:{1}",
count.ToString(), sw.ElapsedTicks.ToString());
    来看看测试结果:
Method:CreateInstance, Count:1, Tick:1449Method:CreateInstance&T&, Count:1, Tick:56Method:MyCreateInstance, Count:1, Tick:11288Method:new object(), Count:1, Tick:10
    哇,就仅执行一次的性能而言,还是乖乖的用CreateInstance&T&吧(或者使用泛型的new()约束)。
Method:CreateInstance, Count:10, Tick:3046Method:CreateInstance&T&, Count:10, Tick:113Method:MyCreateInstance, Count:10, Tick:10802Method:new object(), Count:10, Tick:32
    10次的Emit结果还是差不多(Emit的时间减少是属于误差)
Method:CreateInstance, Count:100, Tick:3211Method:CreateInstance&T&, Count:100, Tick:811Method:MyCreateInstance, Count:100, Tick:9442Method:new object(), Count:100, Tick:13
    100次的Emit结果还是很稳定,基本没有增长
Method:CreateInstance, Count:1000, Tick:3964Method:CreateInstance&T&, Count:1000, Tick:8031Method:MyCreateInstance, Count:1000, Tick:10982Method:new object(), Count:1000, Tick:90
    1000次的Emit结果依然稳定(误差比消耗的还要多),但是还比不上CreateInstance,那么来一次加赛吧。
Method:CreateInstance, Count:10000, Tick:13396Method:CreateInstance&T&, Count:10000, Tick:81018Method:MyCreateInstance, Count:10000, Tick:10706Method:new object(), Count:10000, Tick:564
    10000次执行终于超过了CreateInstance
Method:CreateInstance, Count:100000, Tick:102373Method:CreateInstance&T&, Count:100000, Tick:768419Method:MyCreateInstance, Count:100000, Tick:15689Method:new object(), Count:100000, Tick:4778
    100000次执行的情况下,Emit的优势就完全体现出来了,性能是CreateInstance的6倍多,并且是CreateInstance&T&的近50倍。并且如果减去第一次Emit的代价,将非常接近直接new object()的代价。(15689-约10000的第一次代价,得到的之后约5000多Tick,与直接new object() 5000次的Tick非常接近)
    所以,如果需要大量创建某对象,应该尽量使用Emit或者早期绑定的方式;而如果仅仅创建几次的话,则应该尽量选择CreateInstance&T&或者早期绑定。
    当是真的很好了吗?还记得前言里面说的IL需要特别处理值类型吗?来看看这个测试用例吧:
未处理的异常:  System.ArgumentNullException: 值不能为空。参数名: con   在 System.Reflection.Emit.DynamicILGenerator.Emit(OpCode opcode, ConstructorInfo con)
    出错了,原因是ConstructorInfo没有拿到实例,为什么哪?因为值类型通常没有默认构造函数(几乎所有的高级语言都不允许写值类型的默认构造函数,但是IL并不阻止)。
    那么平时的:static void X()
int x = new int();
Console.WriteLine(x);
    是怎么回事哪?继续使用Reflector看一下吧:.method private hidebysig static void X() cil managed
.maxstack 1
.locals init (
[0] int32 x)
L_0000: ldc.i4.0
L_0001: stloc.0
L_0002: ldloc.0
L_0003: call void [mscorlib]System.Console::WriteLine(int32)
L_0008: ret
    c#编译器直接把int x = new int();
    翻译成了int x = 0;
    那如果换成其它值类型哪?例如:static void X()
int? x = null;
Console.WriteLine(x);
    c#编译器则翻译成:.method private hidebysig static void X() cil managed
.maxstack 1
.locals init (
[0] valuetype [mscorlib]System.Nullable`1&int32& x)
L_0000: ldloca.s x
L_0002: initobj [mscorlib]System.Nullable`1&int32&
L_0008: ldloc.0
L_0009: box [mscorlib]System.Nullable`1&int32&
L_000e: call void [mscorlib]System.Console::WriteLine(object)
L_0013: ret
    可以看到在处理int? x =时,c#编译器使用了:ldloca.s x
initobj [mscorlib]System.Nullable`1&int32&
    这两句,ldloca.s是ldloca的短格式,ldloca可以理解为Load Local variable Address的意思,也即是加载x变量的地址。然后是使用了initobj这个操作符,这也就是.net的高级语言都不需要定义值类型的原因,initobj就是CLR专门用初始化一个值类型的操作符。
    所以,可以进一步改进之前的方法,来进一步支持值类型,当然还可以利用原来的方法,获得相应的帮助,得到下面的改良版:static Func&object& BuildMethodMyCreateInstance(Type type)
DynamicMethod dm = new DynamicMethod(string.Empty, typeof(object), Type.EmptyTypes);
var gen = dm.GetILGenerator();
if (type.IsValueType)
gen.DeclareLocal(type);
gen.Emit(OpCodes.Ldloca_S, 0);
gen.Emit(OpCodes.Initobj, type);
gen.Emit(OpCodes.Ldloc_0);
gen.Emit(OpCodes.Box, type);
gen.Emit(OpCodes.Newobj, type.GetConstructor(Type.EmptyTypes));
gen.Emit(OpCodes.Ret);
return (Func&object&)dm.CreateDelegate(typeof(Func&object&));
    现在这个方法就可以同时处理值类型和引用类型的情况。
阅读(...) 评论()}

我要回帖

更多关于 梦见对象出轨 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信