哪种方法优于另一种方法?

编程入门 行业动态 更新时间:2024-10-23 21:29:32
本文介绍了哪种方法优于另一种方法?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

嗨... 我有一个方法的以下两个摘录。它基本上从DataReader读取数据 并且 将其加载到集合中。 摘录A: * ******* 使用ProjectData 而.Read Me.Add(DirectCast(.Item(" project_id")) ,Guid),_ DirectCast(.Item(" start_date"),DateTime),_ DirectCast(.Item(" end_date"),DateTime), _ DirectCast(.Item(" priority"),Integer),_ DirectCast(.Item(" description"),String),_ DirectCast(.Item(" project_manager"),String) 结束时 结束 摘录B: ******** 使用ProjectData 而.Read Me.Add(.Item(" project_id"), .Item(" start_date"), .Item(" end_date"), .Item(" priority"), .Item(" description"), .Item(" project_manager") E. nd While 结束 问题: 自动投射是否优于显式投射?当我运行ILDASM时,我发现 在每个DirectCast上都有拆箱但是在摘录B中,没有任何任何。 以下摘录A和B的ILDASM片段: ILDASM(摘录A) * *************** IL_0098:ldloc.2 IL_0099:ldstr" description" IL_009e:callvirt实例对象 XXX.Projects.XDataReader :: get_Item(string) IL_00a3:unbox [mscorlib] System.Int32 IL_00a8:ldobj [mscorlib] System.Int32 ILDASM(摘录B) **************** IL_0092:ldloc.2 IL_0093:ldstr" description" IL_0098:callvirt实例对象 XXX.Projects.XDataReader :: get_Item(string) IL_009d:call int32 [Microsoft.VisualBasic] Microsoft.VisualBasic.CompilerServices.IntegerType :: F romObject (对象) 任何指针文章解释了引擎盖下发生的事情。与 关于 铸造也将非常受欢迎。 干杯!

解决方案

这是最好的猜测...但我也想学习这个... 我会假设直接投射会更快(主要是因为我知道直接 施法更快)而且这个调用 [Microsoft.VisualBasic] Microsoft.VisualBasic.CompilerServices。 IntegerType :: F romObject(object) 我认为FromObject是一个类并在堆上创建。我会 也假设该方法中有更多的代码需要更长的时间来执行。虽然unbox(我不知道这意味着什么)似乎很可靠。 非常直接。我不知道,只是假设。 我认为从FromObject 方法看到反汇编是100%肯定会有所帮助。 HTH, CJ " tinman" < DW **** @ yahoo>在消息中写道 新闻:呃************** @ TK2MSFTNGP12.phx.gbl ...

嗨... 我有一个方法的以下两个摘录。它基本上从DataReader读取数据并将其加载到集合中。 摘录A: ******** 随着ProjectData 当.Read Me.Add(DirectCast(.Item(" project_id"),Guid),_ DirectCast(.Item(" start_date"),DateTime),_ DirectCast(.Item(" end_date"),DateTime),_ DirectCast(.Item(" priority"),Integer),_ DirectCast(.Item(" description") ;),String),_ DirectCast(.Item(" project_manager"),String)结束时 摘录B : ******** 使用ProjectData 而.Read Me.Add(.Item(" project_id"),。Item( start_date),。Item(" end_date"), .Item(" priority"),。Item(" description"),。Item(" project_manager")结束时结束 问题: 自动投射是否优于显式投射?当我运行ILDASM时,我发现在每个DirectCast上都有拆箱但是在摘录B中,没有任何内容。 以下摘录A和B的ILDASM: ILDASM(摘录A) **************** IL_0098:ldloc.2 IL_0099:ldstr" description" IL_009e:callvirt实例对象 XXX.Projects.XDataReader :: get_Item(string) IL_00a3:unbox [mscorlib] System.Int32 IL_00a8:ldobj [mscorlib] System.Int32 ILDASM(摘录B) **************** IL_0092: ldloc.2 IL_0093:ldstr" description" IL_0098:callvirt实例对象 XXX.Projects.XDataReader :: get_Item(string) IL_009d:调用int32 [Microsoft.VisualBasic] Microsoft.VisualBasic.CompilerServices.IntegerType :: F romObject(object) 指向文章的任何指针都可以解释引擎盖下的内容。 关于铸造也将非常感激。 干杯!

Tinman, 除了William和我给出的早期答案之外,第一个是更正确的,但是我会在第一次回复时使用我给出的技术 而不是DirectCast。 使用Option Strict On,需要第一个,更正确,其中 你说的是project_id是一个GUID,开始日期是一个DateTime ...你 不允许编译器为你做出决定... 另外使用Option Strict On允许你在编译时间而不是运行时捕获一些错误。 希望这有助于 Jay " tinman" < DW **** @ yahoo>在消息中写道 新闻:呃************** @ TK2MSFTNGP12.phx.gbl ...

嗨... 我有一个方法的以下两个摘录。它基本上从DataReader读取数据并将其加载到集合中。 摘录A: ******** 随着ProjectData 当.Read Me.Add(DirectCast(.Item(" project_id"),Guid),_ DirectCast(.Item(" start_date"),DateTime),_ DirectCast(.Item(" end_date"),DateTime),_ DirectCast(.Item(" priority"),Integer),_ DirectCast(.Item(" description") ;),String),_ DirectCast(.Item(" project_manager"),String)结束时 摘录B : ******** 使用ProjectData 而.Read Me.Add(.Item(" project_id"),。Item( start_date),。Item(" end_date"), .Item(" priority"),。Item(" description"),。Item(" project_manager")结束时结束 问题: 自动投射是否优于显式投射?当我运行ILDASM时,我发现在每个DirectCast上都有拆箱但是在摘录B中,没有任何内容。 以下摘录A和B的ILDASM: ILDASM(摘录A) **************** IL_0098:ldloc.2 IL_0099:ldstr" description" IL_009e:callvirt实例对象 XXX.Projects.XDataReader :: get_Item(string) IL_00a3:unbox [mscorlib] System.Int32 IL_00a8:ldobj [mscorlib] System.Int32 ILDASM(摘录B) **************** IL_0092: ldloc.2 IL_0093:ldstr" description" IL_0098:callvirt实例对象 XXX.Projects.XDataReader :: get_Item(string) IL_009d:调用int32 [Microsoft.VisualBasic] Microsoft.VisualBasic.CompilerServices.IntegerType :: F romObject(object) 指向文章的任何指针都可以解释引擎盖下的内容。 关于铸造也将非常感激。 干杯!

谢谢你们.... 我相信Get * Type *比DirectCast方法效果更好。结果 IL显得更精简... 在使用DirectCast的最初IL中,我担心所有拆箱都会导致性能问题因为它会继续读取循环中的数据(而。读取) .. ...... 干杯...... " tinman" < DW **** @ yahoo>在消息中写道 新闻:呃************** @ TK2MSFTNGP12.phx.gbl ...

嗨... 我有一个方法的以下两个摘录。它基本上从DataReader读取数据并将其加载到集合中。 摘录A: ******** 随着ProjectData 当.Read Me.Add(DirectCast(.Item(" project_id"),Guid),_ DirectCast(.Item(" start_date"),DateTime),_ DirectCast(.Item(" end_date"),DateTime),_ DirectCast(.Item(" priority"),Integer),_ DirectCast(.Item(" description") ;),String),_ DirectCast(.Item(" project_manager"),String)结束时 摘录B : ******** 使用ProjectData 而.Read Me.Add(.Item(" project_id"),。Item( start_date),。Item(" end_date"), .Item(" priority"),。Item(" description"),。Item(" project_manager")结束时结束 问题: 自动投射是否优于显式投射?当我运行ILDASM时,我发现在每个DirectCast上都有拆箱但是在摘录B中,没有任何内容。 以下摘录A和B的ILDASM: ILDASM(摘录A) **************** IL_0098:ldloc.2 IL_0099:ldstr" description" IL_009e:callvirt实例对象 XXX.Projects.XDataReader :: get_Item(string) IL_00a3:unbox [mscorlib] System.Int32 IL_00a8:ldobj [mscorlib] System.Int32 ILDASM(摘录B) **************** IL_0092: ldloc.2 IL_0093:ldstr" description" IL_0098:callvirt实例对象 XXX.Projects.XDataReader :: get_Item(string) IL_009d:调用int32 [Microsoft.VisualBasic] Microsoft.VisualBasic.CompilerServices.IntegerType :: F romObject(object) 指向文章的任何指针都可以解释引擎盖下的内容。 关于铸造也将非常感激。 干杯!

Hi... I have the following two excerpts from a method. It basically reads data from a DataReader and loads it in a collection. Excerpt A: ******** With ProjectData While .Read Me.Add(DirectCast(.Item("project_id"), Guid), _ DirectCast(.Item("start_date"), DateTime), _ DirectCast(.Item("end_date"), DateTime), _ DirectCast(.Item("priority"), Integer), _ DirectCast(.Item("description"), String), _ DirectCast(.Item("project_manager"), String) End While End With Excerpt B: ******** With ProjectData While .Read Me.Add(.Item("project_id"), .Item("start_date"), .Item("end_date"), .Item("priority"), .Item("description"), .Item("project_manager") End While End With Question: Does automatic casting outperform explicit casting ? When I run ILDASM, I find that at each DirectCast, there is unboxing but in Excerpt B, there isn''t any. Snippets of the ILDASM for Excerpt A and B below: ILDASM (Excerpt A) **************** IL_0098: ldloc.2 IL_0099: ldstr "description" IL_009e: callvirt instance object XXX.Projects.XDataReader::get_Item(string) IL_00a3: unbox [mscorlib]System.Int32 IL_00a8: ldobj [mscorlib]System.Int32 ILDASM (Excerpt B) **************** IL_0092: ldloc.2 IL_0093: ldstr "description" IL_0098: callvirt instance object XXX.Projects.XDataReader::get_Item(string) IL_009d: call int32 [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.IntegerType ::F romObject(object) Any pointers to articles that explain what goes on "under the hood" with regards to casting would be much appreciated as well. Cheers !

解决方案

This is mearly a guess at best...but I would like to learn this as well... I would assume the direct cast would be faster (mainly because I know direct cast is faster) and also this call [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.IntegerType ::F romObject(object) I would figure that FromObject is a class and created on the heap. I would also assume there is more code inside that method that takes longer to execute. Whereas the unbox (I don''t know what that means necessarily) seems pretty direct. I don''t know, just assuming. I think it would be helpful to see the dissassembly from the FromObject method to be 100% sure. HTH, CJ "tinman" <dw****@yahoo> wrote in message news:uh**************@TK2MSFTNGP12.phx.gbl...

Hi... I have the following two excerpts from a method. It basically reads data from a DataReader and loads it in a collection. Excerpt A: ******** With ProjectData While .Read Me.Add(DirectCast(.Item("project_id"), Guid), _ DirectCast(.Item("start_date"), DateTime), _ DirectCast(.Item("end_date"), DateTime), _ DirectCast(.Item("priority"), Integer), _ DirectCast(.Item("description"), String), _ DirectCast(.Item("project_manager"), String) End While End With Excerpt B: ******** With ProjectData While .Read Me.Add(.Item("project_id"), .Item("start_date"), .Item("end_date"), .Item("priority"), .Item("description"), .Item("project_manager") End While End With Question: Does automatic casting outperform explicit casting ? When I run ILDASM, I find that at each DirectCast, there is unboxing but in Excerpt B, there isn''t any. Snippets of the ILDASM for Excerpt A and B below: ILDASM (Excerpt A) **************** IL_0098: ldloc.2 IL_0099: ldstr "description" IL_009e: callvirt instance object XXX.Projects.XDataReader::get_Item(string) IL_00a3: unbox [mscorlib]System.Int32 IL_00a8: ldobj [mscorlib]System.Int32 ILDASM (Excerpt B) **************** IL_0092: ldloc.2 IL_0093: ldstr "description" IL_0098: callvirt instance object XXX.Projects.XDataReader::get_Item(string) IL_009d: call int32 [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.IntegerType ::F romObject(object) Any pointers to articles that explain what goes on "under the hood" with regards to casting would be much appreciated as well. Cheers !

Tinman, In addition to the earlier answers William and I gave, the first is more correct, although I would use the technique I gave in my first response here instead of DirectCast. Using Option Strict On, which requires the first, is more "correct", in that you are stating that project_id is a GUID, start date is a DateTime... You are not allowing the compiler make that decision for you... Also using Option Strict On allows you to catch a number of errors at compile time, instead of run time. Hope this helps Jay "tinman" <dw****@yahoo> wrote in message news:uh**************@TK2MSFTNGP12.phx.gbl...

Hi... I have the following two excerpts from a method. It basically reads data from a DataReader and loads it in a collection. Excerpt A: ******** With ProjectData While .Read Me.Add(DirectCast(.Item("project_id"), Guid), _ DirectCast(.Item("start_date"), DateTime), _ DirectCast(.Item("end_date"), DateTime), _ DirectCast(.Item("priority"), Integer), _ DirectCast(.Item("description"), String), _ DirectCast(.Item("project_manager"), String) End While End With Excerpt B: ******** With ProjectData While .Read Me.Add(.Item("project_id"), .Item("start_date"), .Item("end_date"), .Item("priority"), .Item("description"), .Item("project_manager") End While End With Question: Does automatic casting outperform explicit casting ? When I run ILDASM, I find that at each DirectCast, there is unboxing but in Excerpt B, there isn''t any. Snippets of the ILDASM for Excerpt A and B below: ILDASM (Excerpt A) **************** IL_0098: ldloc.2 IL_0099: ldstr "description" IL_009e: callvirt instance object XXX.Projects.XDataReader::get_Item(string) IL_00a3: unbox [mscorlib]System.Int32 IL_00a8: ldobj [mscorlib]System.Int32 ILDASM (Excerpt B) **************** IL_0092: ldloc.2 IL_0093: ldstr "description" IL_0098: callvirt instance object XXX.Projects.XDataReader::get_Item(string) IL_009d: call int32 [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.IntegerType ::F romObject(object) Any pointers to articles that explain what goes on "under the hood" with regards to casting would be much appreciated as well. Cheers !

thanks guys.... I believe the Get*Type* works better than the DirectCast approach. The resulting IL appears "leaner"... In the initial IL with DirectCast, I was afraid that all the unboxing would cause a performance concern since it was going to continue reading data in a loop (While .Read) ........ Cheers... "tinman" <dw****@yahoo> wrote in message news:uh**************@TK2MSFTNGP12.phx.gbl...

Hi... I have the following two excerpts from a method. It basically reads data from a DataReader and loads it in a collection. Excerpt A: ******** With ProjectData While .Read Me.Add(DirectCast(.Item("project_id"), Guid), _ DirectCast(.Item("start_date"), DateTime), _ DirectCast(.Item("end_date"), DateTime), _ DirectCast(.Item("priority"), Integer), _ DirectCast(.Item("description"), String), _ DirectCast(.Item("project_manager"), String) End While End With Excerpt B: ******** With ProjectData While .Read Me.Add(.Item("project_id"), .Item("start_date"), .Item("end_date"), .Item("priority"), .Item("description"), .Item("project_manager") End While End With Question: Does automatic casting outperform explicit casting ? When I run ILDASM, I find that at each DirectCast, there is unboxing but in Excerpt B, there isn''t any. Snippets of the ILDASM for Excerpt A and B below: ILDASM (Excerpt A) **************** IL_0098: ldloc.2 IL_0099: ldstr "description" IL_009e: callvirt instance object XXX.Projects.XDataReader::get_Item(string) IL_00a3: unbox [mscorlib]System.Int32 IL_00a8: ldobj [mscorlib]System.Int32 ILDASM (Excerpt B) **************** IL_0092: ldloc.2 IL_0093: ldstr "description" IL_0098: callvirt instance object XXX.Projects.XDataReader::get_Item(string) IL_009d: call int32 [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.IntegerType ::F romObject(object) Any pointers to articles that explain what goes on "under the hood" with regards to casting would be much appreciated as well. Cheers !

更多推荐

哪种方法优于另一种方法?

本文发布于:2023-11-27 03:05:55,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1636307.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:种方法   哪种   方法

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!