关于Debug和Release之本质区别的讨论

导读:
  
  之前遇到一个要求,需要能够取消一个正在进行中的Web Service。这也是我第一次遇到这个功能,不过不难,我想。既然ASP.NET AJAX的客户端与服务器端通信完全通过Microsoft AJAX Library的异步通信层进行,那么我们只要得到正在请求Web Service的Sys.Net.WebRequest对象,调用其abort方法就可以了。但是究竟应该如何得到这个对象呢?于是我粗略地阅读了一下代码。
  www@bitscn@com
  首先假设有如下的Web Service方法定义(DemoService.asmx): www@bitscn@com
  [ScriptService]
  publicclassDemoService : System.Web.Services.WebService
  {
  [WebMethod]
  publicstringDemoMethod()
  {
  return"Hello World";
  }
  }
  [bitsCN.Com]
  bbs.bitsCN.com中国网管论坛
  访问DemoService.asmx/jsdebug(或者将其使用ScriptManager引用到页面中之后)就能够得到如下的代理(片断、经过排版)类。 bbs.bitsCN.com中国网管论坛
  var DemoService = function()
  {
  DemoService.initializeBase(this);
  this._timeout = 0;
  this._userContext = null;
  this._succeeded = null;
  this._failed = null;
  }
  DemoService.prototype =
  {
  DemoMethod:function(succeededCallback, failedCallback, userContext)
  {
  returnthis._invoke(
  DemoService.get_path(),
  'DemoMethod',
  false,
  {},
  succeededCallback,
  failedCallback,
  userContext);
  }
  }
  DemoService.registerClass('DemoService',Sys.Net.WebServiceProxy);
  ... bitsCN~com
  www@bitscn@com
  显然,这个代理类继承了Sys.Net.WebServiceProxy类,于是我就把目光转向了其中的_invoke方法:
  DL@bitsCN_com网管软件下载
  functionSys$Net$WebServiceProxy$_invoke(
  servicePath, methodName, useGet, params, onSuccess, onFailure, userContext) {
  // validation omitted
  ...
  returnSys.Net.WebServiceProxy.invoke(
  servicePath,
  methodName,
  useGet,
  params,
  onSuccess,
  onFailure,
  userContext,
  this.get_timeout());
  } BBS.bitsCN.com网管论坛
  www_bitscn_com中国.网管联盟
  这下又将操作委托给了Sys.Net.WebServiceProxy.invoke静态方法,继续看代码:
  www_bitscn_com中国.网管联盟
  Sys.Net.WebServiceProxy.invoke = function Sys$Net$WebServiceProxy$invoke(
  servicePath, methodName, useGet, params, onSuccess, onFailure, userContext, timeout) {
  // validation omitted
  ...
  // Create a web request to make the method call
  var request = newSys.Net.WebRequest();
  // preparing request omitted
  ...
  request.invoke();
  function onComplete(response, eventArgs) {
  // method body omitted
  }
  returnrequest;
  } www_bitscn_com中国.网管联盟
  bbs.bitsCN.com
  嗨,这不就是我所需要的Sys.Net.WebRequest对象吗?原来想要得到这个对象那么简单,于是我就写下了下面的代码:
  bbs.bitsCN.com中国网管论坛
  varrequest = DemoService.DemoMethod(onComplete);
  中国_网管联盟bitsCN.com
  [bitsCN.Com]
  然后在必要时: BBS.bitsCN.com网管论坛
  request.abort(); 中国_网管联盟bitsCN.com
  bitsCN#com中国网管联盟
  执行,出现了错误:request为undefined,为什么DemoMethod方法调用没有返回request对象?跟踪了代码之后,不大不小地晕了一下,原来问题出在这里:
  [bitsCN.Com]
  DemoService._staticInstance = newDemoService();
  ...
  DemoService.DemoMethod = function(onSuccess,onFailed,userContext)
  {
  DemoService._staticInstance.DemoMethod(onSuccess,onFailed,userContext);
  }
  bitsCN~com
  bbs.bitsCN.com
  虽然早就知道Web Service代理会在类上创建一个Singleton对象,并且创建静态方法再委托给那个实例上的相应方法,却一直没有意识到这个细节。在上面的静态方法中,居然是直接调用了DemoMethod方法,却没有将结果返回出来,真让我哭笑不得了一下。 www@bitscn@com
  不过问题时非常容易解决的,只要使用如下的方式在客户端调用WebService方法就可以了: [bitsCN_com]
  varrequest = DemoService._staticInstance.DemoMethod(onComplete); bitsCN.nET*中国网管博客
  bbs.bitsCN.com中国网管论坛
  不过这个做法似乎……有些奇怪?那么您也可以这样: BBS.bitsCN.com网管论坛
  var demoService = newDemoService();
  var request = demoService.DemoMethod(onComplete); www@bitscn@com
  www@bitscn@com
  在这里,重新创建一个demoService对象似乎有些多余,不过在某些时候也是非常有用的做法。例如,您需要将操作分为两类,一类的超时时间为5秒,而另一类为10秒,因此您就可以创建两个代理对象,分别设置不同的超时时间。因为超时时间我们只能在Service的级别上设置,而不能在调用方法时指定。 DL@bitsCN_com网管软件下载

本文转自
http://www.bitscn.com/dotnet/xml/200709/109617.html
在CCS(Code Composer Studio)中,DebugRelease是两种不同的编译方式,它们有以下几个区别。 首先,Debug版本Release版本的生成方式不同。Debug版本在项目的Build Options中,通过设置Compiler -> Generate Debug选项来生成。而Release版本是指发布版本,它主要通过进行各种优化来确保程序在代码大小运行速度上都是最优的。 其次,Debug版本Release版本在编译选项上也有区别。它们分别有一组针对不同目的的选项。比如,Debug版本可能会开启一些额外的调试信息,以便在调试过程中能够更好地定位问题。而Release版本则会进行一些优化,例如删除不必要的调试信息、进行代码优化等,以提高程序的性能效率。 最后,Debug版本Release版本在使用上也存在一些差异。在调试过程中,Debug版本可以通过设置断点、单步执行等方式来逐行调试程序。而Release版本则不会包含这些调试信息,因此无法直接进行调试。但是,可以通过一些间接的方式来"调试" Release版本的程序,比如使用日志输出进行调试、使用追踪工具来分析程序的执行流程等。 总结起来,CCS中的DebugRelease的区别主要在于生成方式、编译选项调试能力上。Debug版本用于开发调试阶段,可以提供更多的调试信息;而Release版本则是发布版本,通过各种优化来提高程序的性能效率。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [关于DebugRelease本质区别讨论](https://blog.csdn.net/a675311/article/details/50562913)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [[转]CCS中DebugRelease的…](https://blog.csdn.net/pymqq/article/details/19977631)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值