小编cyn*_*nic的帖子

LINQ表达树是否适合树木?

LINQ表达树是否适当的树,如图,(有针对性或不指向,维基百科似乎不太一致)没有循环?以下C#表达式中表达式树的根是什么?

(string s) => s.Length
Run Code Online (Sandbox Code Playgroud)

表达式树看起来像这样," - >"表示可通过其他节点访问的节点的属性名称.

     ->Parameters[0]
 Lambda---------Parameter(string s)
    \               /
     \->Body       /->Expression
      \           /
      Member(Length)
Run Code Online (Sandbox Code Playgroud)

使用ExpressionVisitor访问LambdaExpression时,将访问ParameterExpression两次.有没有办法使用ExpressionVisitor访问LambdaExpression,以便所有节点只访问一次,并以特定的,众所周知的顺序(预订,有序,后订单等)?

c# linq expression-trees

27
推荐指数
2
解决办法
861
查看次数

.NET JIT编译性能(包括动态方法)如何受C#编译器的映像调试选项的影响?

我正在尝试优化我的应用程序,以便它在启动后立即运行良好.目前,它的发行版包含304个二进制文件(包括外部依赖项),总计57兆字节.它是一个主要进行数据库访问的WPF应用程序,没有任何重要的计算.

我发现Debug配置为大多数操作提供了更好的(~5倍增益)时间,因为它们是在应用程序进程的生命周期中第一次执行.例如,在应用程序中打开特定屏幕,NGENed Debug需要0.3秒,JITted Debug需要0.5秒,NGENed Release需要1.5秒,JITted Release需要2.5秒.

我知道JIT编译时间的差距是由JIT编译器对Release二进制文件应用更积极的优化引起的.从我可以告诉,调试和发布配置由不同/p:DebugType/p:Optimize传递给C#编译器开关,但我看到,即使我建立与应用程序相同的性能差距/p:Configuration=Release /p:DebugType=full /p:Optimize=false-也就是说,相同的图像调试选项中/p:Configuration=Debug.

我确认通过查看DebuggableAttribute应用于生成的程序集来应用选项.观察NGEN输出,我看到<debug>添加到正在编译的一些程序集的名称 - NGEN如何区分调试和非调试程序集?正在测试的操作使用动态代码生成 - 动态代码应用了什么级别的优化?

注意:由于外部依赖性,我使用的是32位框架.我应该期待x64有不同的结果吗?

注意:我也不使用条件编译.因此,两种配置的编译源都是相同的.

.net c# clr jit ngen

15
推荐指数
1
解决办法
1530
查看次数

在调试MSVC ABI Rust程序时如何检查变量值?

我已经下载了Rust 1.7.0的MSVC ABI版本,并按照文档中的猜谜游戏部分进行了操作.

我注意到构建使用本机工具链(在我的情况下是Visual Studio 2015 Update 2),因此生成本机调试器(如WinDBG,CDB或Visual Studio调试器)可以使用的本机PDB(调试符号).我可以轻松设置断点,步入标准库源等等.

我不能做的是检查变量值.无论使用何种调试器,"本地人"显示都是空的.

根据我的收集,Visual Rust/RustDT IDE在使用GDB或LLDB作为后端时显示本地,而不是本机Windows调试引擎.我不完全确定我是否可以使用它们来调试为MSVC ABI编译的Rust程序(使用PDB等).

如果我想获得必要的调试经验,我唯一的选择是切换到GNU ABI?除此之外,是否有一种简单的方法可以从原始调试工具(寄存器,存储器映射)映射到Rust符号(变量值)?

debugging pdb-files rust

11
推荐指数
1
解决办法
1538
查看次数

为什么跳过可见性检查仅允许动态方法?

我正在移植代码,该代码DynamicMethod广泛使用s来允许预编译,以获得更好的冷启动性能.我注意到DynamicMethods可以被JITted并且在跳过可见性检查的情况下执行,这允许它们访问私有嵌套类型,但普通程序集不能(或者不能它们?我没有看到任何明显的加载器选项).这个设计决定背后的理由是什么?

.net clr reflection.emit

6
推荐指数
1
解决办法
290
查看次数

是否在Windows Azure上的HTTP处理程序中需要ThreadAbortException?

我在一个"小"计算实例中托管在Windows Azure上的ASP.NET HTTP处理程序.它处理大型二进制文件的下载和上传.在该Web角色中没有其他任何内容,并且根据指南配置了2个实例.当从具有慢速连接的计算机完成下载并且我尝试一次执行多次下载以扼杀客户端的带宽时,有时我会ThreadAbortException在处理程序中获得一个,最常见的.Write是在Response.OutputStream(我Response.BufferOutput = false事先设置)中.堆栈跟踪如下:

System.Threading.ThreadAbortException: Thread was being aborted.
   at System.Web.Hosting.UnsafeIISMethods.MgdExplicitFlush(IntPtr context)
   at System.Web.Hosting.IIS7WorkerRequest.ExplicitFlush()
   at System.Web.HttpResponse.Flush(Boolean finalFlush)
   at System.Web.HttpWriter.WriteFromStream(Byte[] data, Int32 offset, Int32 size)
   at MyHandler.ProcessGetRequest(HttpContext context)
   at MyHandler.ProcessRequest(HttpContext context)
Run Code Online (Sandbox Code Playgroud)

(该Stream.Write调用显然是内联的,因此它不会显示在堆栈跟踪中).

为什么线程被中止?我猜我正在达到某种超时(可能是套接字写入超时),正在以正常方式中止线程,以便ASP.NET运行时处理它?

请注意,它是一个单独的HTTP处理程序,而不是.aspx/.cshtml页面或MVC控制器,我的代码中没有任何地方,我接触Response.End,Response.RedirectServer.Transfer.

asp.net httphandler azure

4
推荐指数
1
解决办法
1450
查看次数

如何将命令添加到ADO.NET实体数据模型设计器的上下文菜单中?

基本上,我需要Visual Studio包项目文件中的正确值guidid属性.vsct,如:

<Group guid="guidVSPackage1CmdSet" id="MyMenuGroup" priority="0x0600">
  <Parent guid="guidSHLMainMenu" id="IDM_VS_MENU_TOOLS"/>
</Group>
Run Code Online (Sandbox Code Playgroud)

以上内容直接来自默认项目模板,并向Tools主菜单添加命令.我在哪里可以找到(或我如何嗅探)ADO.NET实体数据模型设计器上下文菜单的guid:id值,具有"从数据库更新模型......"等等?

在您提出问题之前:VS 2010实体设计器中的MEF可扩展性选项不包括我的场景 - 我需要实现一个命令来在独立和FK映射关联之间进行转换.

visual-studio-2010 ado.net-entity-data-model vspackage visual-studio-extensions

1
推荐指数
1
解决办法
875
查看次数