随笔分类 -  .NET

.NET Core .NET Framework
摘要:一个简单的 Task 不会消耗多少时间,但如果你不合适地将 Task 转为同步等待,那么也可能很快耗尽线程池的所有资源,出现类似死锁的情况。 本文将以一个最简单的例子说明如何出现以及避免这样的问题。 本文内容 耗时的 Task.Run 最简复现代码 原因 解决 更多死锁问题 本文内容 耗时的 Tas 阅读全文
posted @ 2018-12-23 14:57 walterlv 阅读(704) 评论(0) 推荐(0) 编辑
摘要:.NET Framework 4.5 开始引入 Task.Run,它可以很方便的帮助我们使用 async / await 语法,同时还使用线程池来帮助我们管理线程。以至于我们编写异步代码可以像编写同步代码一样方便。 不过,如果滥用,也可能导致应用的性能急剧下降。本文将说明在默认线程池配置(Threa 阅读全文
posted @ 2018-12-23 14:56 walterlv 阅读(1988) 评论(0) 推荐(0) 编辑
摘要:在 Connect(); 2018 大会上,微软发布了 .NET Core 3 Preview,以及基于 .NET Core 3 的 WPF;同时还发布了 Visual Studio 2019 预览版。你可以基于 .NET Core 3 创建 WPF 程序。不过,如果你已经有基于 .NET Fram 阅读全文
posted @ 2018-12-06 10:31 walterlv 阅读(857) 评论(0) 推荐(0) 编辑
摘要:在 Connect(); 2018 大会上,微软发布了 .NET Core 3 Preview,以及基于 .NET Core 3 的 WPF;同时还发布了 Visual Studio 2019 预览版。不过 Visual Studio 2019 的预览版中并没有携带 WPF on .NET Core 阅读全文
posted @ 2018-12-06 10:29 walterlv 阅读(1425) 评论(0) 推荐(0) 编辑
摘要:对 .NET 程序进行性能分析,dotTrace 能应对绝大多数的场景。在开启一个进程进行性能分析之前,我们会看到一些性能分析选项(Profiler Options)。本文将介绍这几个选项的含义,并用实际的例子来说明其用途。 本文内容 dotTrace 的性能分析选项 Sampling 采样 Tra 阅读全文
posted @ 2018-11-28 16:06 walterlv 阅读(623) 评论(0) 推荐(0) 编辑
摘要:在做 UWP 应用开发的时候还有什么理由可以用到加速度计呢?场景很多啦,比如做游戏,做类似 Surface Hub 那种一边旋转,一边所有内容跟着一起转的效果。 Windows 10 UWP 中的加速度计使用非常简单,只需要简单几句代码即可。 本文内容 重力迷宫游戏 初始化 Acceleromete 阅读全文
posted @ 2018-11-28 15:54 walterlv 阅读(835) 评论(0) 推荐(0) 编辑
摘要:Win2D 是 DirectX 的一个高层封装,提供了极大 DirectX 性能的同时,又具有很好用的 API 设计。 用 Win2D 除了能做出高性能的视觉效果之外,还可以轻而易举地搭建一个游戏循环出来。使用 Win2D 的游戏循环,你可以直接做出一个简单的游戏出来。 本文内容 使用 Win2D 阅读全文
posted @ 2018-11-28 15:51 walterlv 阅读(632) 评论(0) 推荐(0) 编辑
摘要:使用 Win2D 绘制图片和绘制椭圆都非常容易,可是如何使用 Win2D 绘制图片纹理的椭圆呢? 本文内容 重力迷宫小球 Win2D 实现 关于 CanvasCommandList 本文内容 重力迷宫小球 Win2D 实现 关于 CanvasCommandList 重力迷宫小球 Win2D 实现 关 阅读全文
posted @ 2018-11-28 15:49 walterlv 阅读(313) 评论(0) 推荐(0) 编辑
摘要:MSBuild 或 Roslyn 编译项目时均支持差量编译,毕竟为了性能。我在 每次都要重新编译?太慢!让跨平台的 MSBuild/dotnet build 的 Target 支持差量编译 一文中介绍了如何使一个 Target 支持差量编译。在那篇文章中我说到差量编译会导致 Target 不执行;也 阅读全文
posted @ 2018-11-28 15:47 walterlv 阅读(257) 评论(0) 推荐(0) 编辑
摘要:我们有很多种方法评估一个方法的执行耗时,比如使用性能分析工具,使用基准性能测试。不过传统的在代码中编写计时的方式依然有效,因为它可以生产环境或用户端得到真实环境下的执行耗时。 如果你希望在 .NET/C# 代码中编写计时,那么阅读本文可以获得一些建议。阅读本文也可以了解到 QueryPerforma 阅读全文
posted @ 2018-11-28 15:46 walterlv 阅读(1396) 评论(0) 推荐(0) 编辑
摘要:Windows Community Toolkit 再次更新到 5.0。以前可以在 WPF 中使用有限的 UWP 控件,而现在有了 WindowsXamlHost,则可以使用更多 UWP 原生控件了。 关于 Windows Community Toolkit 早期版本的 Xaml Bridge,可以 阅读全文
posted @ 2018-11-28 15:45 walterlv 阅读(1955) 评论(0) 推荐(0) 编辑
摘要:在 WindowsXamlHost:在 WPF 中使用 UWP 的控件(Windows Community Toolkit) 一文中,我们说到了在 WPF 中引入简单的 UWP 控件以及相关的注意事项。不过,通常更有实际价值的是更复杂的 UWP 控件的引入,通常是一整个 Page。 本文将介绍如何在 阅读全文
posted @ 2018-11-28 15:37 walterlv 阅读(1743) 评论(0) 推荐(0) 编辑
摘要:不知你是否见过 try { } finally { } 代码中,try 块留空,而只往 finally 中写代码的情况呢?这种写法有其特殊的目的。 本文就来说说这种不一样的写法。 本文内容 空的 try 块 受约束的执行区域(Constrained Execution Regions) 参考资料 本 阅读全文
posted @ 2018-11-28 15:33 walterlv 阅读(283) 评论(0) 推荐(0) 编辑
摘要:大家都说反射耗性能,但是到底有多耗性能,哪些反射方法更耗性能;这些问题却没有统一的描述。 本文将用数据说明反射各个方法和替代方法的性能差异,并提供一些反射代码的编写建议。为了解决反射的性能问题,你可以遵循本文采用的各种方案。 本文内容 反射各方法的性能数据 反射的高性能开发建议 创建类型的实例 反射 阅读全文
posted @ 2018-11-05 10:34 walterlv 阅读(1513) 评论(0) 推荐(2) 编辑
摘要:路 2018 年 10 月 23 日中午,我和林德熙踏上了前往上海的旅程。这是德熙第一次进行如此长途的旅行,之前几乎一直待在家里。 微软技术暨生态大会是从 10 月 25 日到 10 月 27 日,而 10 月 24 日是微软合作伙伴会议。我们当初在制定行程时,并没有意识到微软合作伙伴会议与微软技术 阅读全文
posted @ 2018-10-31 15:05 walterlv 阅读(255) 评论(0) 推荐(0) 编辑
摘要:Windows 10 自 1703 开始引入第二代的多屏 DPI 机制(PerMonitor V2),而 WPF 框架可以支持此第二代的多屏 DPI 机制。 本文将介绍 WPF 框架利用第二代多屏 DPI 机制进行高 DPI 适配的方法。同时,也介绍低版本的 WPF 或者低版本的操作系统下如何做兼容 阅读全文
posted @ 2018-10-28 18:35 walterlv 阅读(848) 评论(0) 推荐(0) 编辑
摘要:本文将介绍 Windows 系统中高 DPI 开发的基础知识。由于涉及到坐标转换,这种转换经常发生在计算的不知不觉中;所以无论你使用哪种 Windows 下的 UI 框架进行开发,你都需要了解这些内容,以免不断踩坑。 <!-- ![Windows 高 DPI 应用开发课件](/static/post 阅读全文
posted @ 2018-10-28 16:51 walterlv 阅读(1517) 评论(0) 推荐(0) 编辑
摘要:我们在 WPF 中使用绑定时可以使用 ElementName=Foo 这样的写法,并且还能够真的在运行时找到这个名称对应的对象,是因为 WPF 中提供了名称范围概念。 实现 INameScope 接口可以定义一个名称范围。无论你使用 Name 属性还是使用 x:Name 特性都可以在一个名称范围内指 阅读全文
posted @ 2018-10-28 13:01 walterlv 阅读(308) 评论(0) 推荐(0) 编辑
摘要:在 Binding 中使用 ElementName 司空见惯,没见它出过什么事儿。不过当你预见 ContextMenu,或者类似 Grid.Row / Grid.Column 这样的属性中设置的时候,ElementName 就不那么管用了。 本文将解决这个问题。 本文内容 以下代码是可以正常工作的 阅读全文
posted @ 2018-10-28 11:47 walterlv 阅读(492) 评论(0) 推荐(0) 编辑
摘要:.NET/C# 程序从 Main 函数开始执行,基本上各种书籍资料都是这么写的。不过,我们可以写多个 Main 函数,然后在项目文件中设置应该选择哪一个 Main 函数。 你可能会觉得这样没有什么用,不过如果你的应用程序在不同的编译条件下有不同的启动代码,或者你需要持续去大范围修改启动代码,那么做一 阅读全文
posted @ 2018-10-28 11:41 walterlv 阅读(1257) 评论(0) 推荐(1) 编辑