摘要: 本文是读伟民哥翻译的 .NET内存管理宝典 这本书的笔记,我认为读书的过程也需要实践,这样对一知半解的知识也有较为清晰的了解。在阅读到 string 在内存的布局时,我看到 RuntimeHelpers 的 OffsetToStringData 数据,据说此属性可以获取到字符串的字符在内存存放的实际地址,本文将来写一个混合 C# 和 C++\CLI 的应用来进行测试 阅读全文
posted @ 2022-09-15 20:02 lindexi 阅读(69) 评论(0) 推荐(0) 编辑
摘要: 在 Windows 下,颜色的格式有很多,我好奇为什么要设计出 R5G6B5 这样的格式?通过阅读一些书和官方的文档,似乎了解了为什么,我在本文记录一下 阅读全文
posted @ 2022-09-15 20:01 lindexi 阅读(110) 评论(0) 推荐(0) 编辑
摘要: 本文记录一个因为 NVIDIA 显卡驱动错误而让 WPF 应用启动闪退问题 阅读全文
posted @ 2022-09-15 19:59 lindexi 阅读(328) 评论(0) 推荐(0) 编辑
摘要: 本文记录某个应用在某台 Windows 8.1 x86 系统上,运行时抛出 OutOfMemoryException 异常,启动失败。应用程序能启动,但是在第一次碰到渲染时,就发现渲染初始化失败,从而让应用程序闪退 阅读全文
posted @ 2022-09-15 19:58 lindexi 阅读(482) 评论(0) 推荐(0) 编辑
摘要: 本文收集 System.Net.Sockets.SocketException 异常错误码为 10106 导致无法联网的问题 阅读全文
posted @ 2022-09-15 19:58 lindexi 阅读(2000) 评论(0) 推荐(0) 编辑
摘要: 我使用 User32 的 SetWindowPos 方法去设置一个跨进程的窗口,这个窗口是停止响应的,将让调用的 SetWindowPos 方法卡住,不继续执行逻辑。通过堆栈分析是卡在 NtUserSetWindowPos 方法上,调用 SetWindowPos 方法不返回 阅读全文
posted @ 2022-09-15 19:57 lindexi 阅读(227) 评论(0) 推荐(0) 编辑
摘要: 在加上热重载时,源代码生成 Source Generator 的默认行为会让 Visual Studio 有些为难,其原因是热重载会变更代码,变更代码触发代码生成器更新代码,代码生成器更新的代码说不定又会有某些逗比逻辑再次触发热重载。于是就会发现在某些复杂的项目下,开启热重载之后,在编辑并继续界面将会等非常久,甚至再也无法继续。为了解决这个问题,大聪明设计了 Incremental Generators 机制,此 Incremental Generators 机制和 Source Generator 不冲突,被设计用来解决热重载的源代码生成性能问题,本文将告诉大家此新的 API 的入门级使用 阅读全文
posted @ 2022-09-15 19:55 lindexi 阅读(1204) 评论(0) 推荐(1) 编辑
摘要: 这是一个 WPF 框架的 API 变更提议,记录一下博客 阅读全文
posted @ 2022-09-15 19:53 lindexi 阅读(57) 评论(0) 推荐(0) 编辑
摘要: 无论是使用 WPF 全屏窗口,还是高性能全屏透明窗口,都会在 Chrome 97 以及使用 chromium 对应版本内核的应用的视频停止播放。这是 chromium 的一个优化,因为 chromium 认为,如果有全屏窗口盖在上面,自然此时停止播放视频可以节省资源。然而 chromium 却没有考虑到,有很多会议的应用,虽然是全屏的,但也是透明的,于是此时停止播放视频将是非预期的 阅读全文
posted @ 2022-09-15 19:52 lindexi 阅读(116) 评论(0) 推荐(0) 编辑
摘要: 本文告诉大家如何在 WPF 里面,使用 Skia 解析绘制 SVG 图片。本文也适合控制台使用 SkiaSharp 解析绘制 SVG 图片,本文的 WPF 部分只是在 Skia 绘制完成之后,将 Skia 的内容绘制到 WPF 的 WriteableBitmap 图片,从而在界面显示 阅读全文
posted @ 2022-09-15 19:51 lindexi 阅读(821) 评论(0) 推荐(0) 编辑
摘要: 本文记录一个 WPF 在 dotnet 6 的一个已知问题,且此问题我已修复提交给官方仓库。这是一个只有在 dotnet 6 框架下,非 dotnet 5 也非 .NET Core 3.1 也非 .NET Framework 的问题,要求开启 DPI 感觉等级为 PerMonitorV2 的特性,在带触摸屏上的应用,应用运行过程中,切换屏幕的 DPI 之后,触摸过程有概率触发在触摸线程访问 UI 的依赖属性,在触摸线程抛出异常炸掉应用 阅读全文
posted @ 2022-09-15 19:50 lindexi 阅读(178) 评论(0) 推荐(2) 编辑
摘要: 在 VisualStudio 2022 里的某个版本开始,将会在移动文件到其他文件夹时,自动修改命名空间,使用匹配文件夹路径的命名空间。如果这个功能能顺手将其他引用此类型的全部符号同时变更,那自然是很好的功能,可惜没有,很多时候都只是修改了移动的文件里面的命名空间,没有更改其他相关引用的代码的逻辑,导致了移动一次文件需要重新将命名空间改回来修复构建,极大降低效率 阅读全文
posted @ 2022-09-15 19:49 lindexi 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 本文告诉大家如何在 UWP 从 文件 StorageFile 转 SoftwareBitmap 图片的方法 阅读全文
posted @ 2022-09-15 19:48 lindexi 阅读(81) 评论(0) 推荐(0) 编辑
摘要: 在国内垃圾的网络环境下,我在虚拟机里面安装了 Ubuntu 系统,准备用来测试 MAUI 在 Linux 上的行为,然而使用 dotnet restore 构建时,提示 NU1301 失败。我通过配置环境变量的方式,让 nuget 还原使用上我物理机的网络代理,成功将 NuGet 包下载 阅读全文
posted @ 2022-09-15 19:47 lindexi 阅读(965) 评论(0) 推荐(0) 编辑
摘要: 谷歌的 Skia 的一个卖点就是提供了完美的 SVG 的支持,包括输入和输出。输入指的是给一张 SVG 图片,将这个 SVG 渲染出来。输出就是将输出画面保存为 SVG 格式的图片。自然 SkiaSharp 是 Skia 的封装,也就带上了此功能。本文将告诉大家如何在 SkiaSharp 里面设置画面输出为 SVG 图片,使用 SkiaSharp 制作和编辑 SVG 图片 阅读全文
posted @ 2022-09-15 19:46 lindexi 阅读(501) 评论(0) 推荐(1) 编辑
摘要: 本文记录使用 Microsoft.Maui.Graphics.Skia 的 DrawString 进行绘制文本,不同的重载方法绘制的文本的坐标不同的问题 阅读全文
posted @ 2022-09-15 19:36 lindexi 阅读(469) 评论(0) 推荐(1) 编辑
摘要: 本文记录 FileStream 的 FlushAsync 方法在 .NET Framework 与 .NET Core 行为的不同 阅读全文
posted @ 2022-09-15 19:35 lindexi 阅读(50) 评论(0) 推荐(0) 编辑
摘要: 在 dotnet 的最佳实践里面,不推荐在静态构造函数里面包含复杂的逻辑,其中也就包含了本文聊的和多线程相关的锁的使用。最佳做法是尽量不要在静态构造函数里面碰到任何和锁以及多线程安全相关的逻辑。本文来告诉大家,在静态构造函数里面使用锁将带来的问题以及原因 阅读全文
posted @ 2022-09-15 19:34 lindexi 阅读(126) 评论(1) 推荐(3) 编辑
摘要: 在 .NET Framework 时代里面,有一组有趣的概念,那就是 SDK 和 Runtime 这两个概念。开发模式十分有趣,在开发者设备上,可以指定 .NET Framework 的 SDK 版本,例如指定 .NET Framework 4.5 版本。开发完成之后,分发给到用户,用户的电脑上所安装的 .NET Framework 基本都是 Runtime 版本。应用程序要求运行的 Runtime 版本一定要大于等于 SDK 的指定版本号 这就有一个非常有趣的问题了,我开发环境使用的 SDK 是低版本,例如 .NET Framework 4.5 版本。但用户的电脑上所安装的 .NET Framework 的 Runtime 版本是高版本,例如是 .NET Framework 4.7 版本,中间距离过了几年的版本。那行为如何保证相同?事实上,咱没有碰到过这个问题,这是因为在 .NET Framework 层做了很多兼容处理逻辑,其中就包括本文要和大家聊的 WPF 框架的兼容行为 阅读全文
posted @ 2022-09-15 19:33 lindexi 阅读(509) 评论(0) 推荐(0) 编辑
摘要: 我在写域名备份功能,想要修改请求的 IP 地址,同时又将原有的请求域名带上。实现方法是修改请求的地址,在 HttpRequestMessage 的 Header 上添加 HOST 记录,记录的值就是原有的域名。然而在开启 Fiddler 之后,将会发现实际发出的请求的 HOST 是实际请求的地址 阅读全文
posted @ 2022-09-15 19:32 lindexi 阅读(171) 评论(0) 推荐(0) 编辑