C#获取Process的性能占用信息
很多MC服务器启动器高级功能中有一项是能够实时监控服务端进程的性能占用,这需要管理器进程能够获取到服务端进程的CPU和内存占用情况。 LSL是使用C#编写的,但是.NET没有任何现成的类能够集中监控这些数据。唯一一个能够获取到这些数据的类是.NET Framework 4.6.2中的PerformanceCounter,但是首先,这玩意儿在高版本的.NET中已经被移除了;其次,它只兼容Windows平台;第三,这东西虽然详细,但是没有任何卵用,因为它监控的是C#应用程序本身的性能信息,管不到Process对象上…… 所以,我们只能自己动手丰衣足食了。 示例123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108...
AvaloniaUI在TemplatedControl中使用ItemsRepeater
众所周知,AvaloniaUI的ItemsRepeater是一个用于显示数据集合的控件,能够很方便地从一个ObservableCollection中的数据生成多个子控件。 又众所周知,在AvaloniaUI中,实现自定义控件的最佳实践是使用模板控件(TemplatedControl)。 然而,当你想要在TemplatedControl中使用ItemsRepeater时,你会发现,ItemsRepeater内部DataTemplate的DataType并不会正确使用ObservableCollection内部的类。例如,以下这种情况会直接报编译错误: 1234567891011121314151617181920<Styles xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:controls="using:MyApp.Controls"> <Style Selector="...
C#编程守则
介绍本页是我在学习C#时总结的一些相关编程约定,不定期扩充。 不一定要完全遵守约定,对于某些确有其事的需求,小小的不遵守一下也无伤大雅。 命名约定总则详见C#官网,特别注意关于静态字段的命名约定。这些约定检查已经内置于JetBrains Rider等IDE中。 如果某些你认为应该使用Pascal法的字段实际上使用驼峰法命名,考虑一下是否可以将它们转换为访问器而非字段。 细则 不要将To替换为2 最好不要缩写以避免全大写命名。对于实在太长以至于必须缩写的,可以设置项目级忽略 例外:ID建议命名为Id 日志相关(Microsoft.Extensions.Logging.LoggerExtensions) 总是使用模板而不是字符串拼接以优化性能 命名所有模板空位以增加可读性 不要在Message中使用Exception.ToString(),而是使用LogError(Exception? exception, string? string)重载
Fcitx5输入法兼容性配置杂谈
本文包括:Arch Linux上KDE Wayland环境下Fcitx5输入法的兼容性配置,包括但不限于:Flatpak应用,Qt应用(如wemeet),Electron应用(如新QQ)。 Wayland基础配置(共通)本段更新于2026/4/21,此时ArchWiki已更新,主要修改了关于GTK_IM_MODULE与QT_IM_MODULE的设置问题。 我相信没人还在用X11了吧?(笑) Wayland下的fcitx5是基本开箱即用的,本段的配置是用于正常使用XWayland应用程序的。 为了支持GTK: 12[Settings] gtk-im-module = fcitx 请勿设置GTK_IM_MODULE环境变量。 为了支持Qt,设置以下环境变量: Qt5与非KDE桌面也需要这些环境变量。 12QT_IM_MODULES=wayland;fcitx QT_IM_MODULE=fcitx 为了支持其他的XWayland应用程序: 1XMODIFIERS=@im=fcitx Flatpakflatpak 沙箱应用启动时不会读到 ~/.config/gtk-3.0/sett...
Ubuntu桌面因不支持EAP_IDENTITY而无法连接IKEv2 VPN的解决方法
省流:把strongSwan装全。 前情提要在Gnome桌面下,默认的图形配置界面里只支持OpenVPN/PPTP/WireGuard VPN,而无法配置基于IPsec/IKEv2的VPN(说来也奇怪,Windows下反而是内置了IKEv2和PPTP/L2TP等的客户端,而OpenVPN之类的才要额外客户端)。为了支持IKEv2,我们需要使用的是strongSwan,最重要的是其图形配置前端network-manager-strongswan。 1sudo apt install network-manager-strongswan 但是装完之后,在证书等配置都完全正常的情况下,使用EAP-MSCHAPv2认证时会失败,报错如下: 12314[IKE] server requested EAP_IDENTITY (id 0x00), sending 'username' 14[IKE] EAP_IDENTITY not supported, sending EAP_NAK 15[IKE] received EAP_FAILURE, EAP authentication faile...
AvaloniaUI TextBox无法在setter中被清空的解决办法
先上代码: 1234567891011121314151617private string _inputText = ""; public string InputText { get => _inputText; set { string endless = value.TrimEnd('\r', '\n'); if (endless.Length < value.Length) { this.RaiseAndSetIfChanged(ref _inputText, ""); } else { this.RaiseAndSetIfChanged(ref _inputText, value); } } } 在这段C#代码中,InputText访问器使用ReactiveUI双向绑定到视图的一个TextBox中,当在TextBox中输入回车后并没有像预期的那样被清空。 按照常规逻辑...
TacZ枪包在服务端上的特殊安装要求
TacZ枪包在新版客户端上的安装大家都明白,直接把zip包丢到版本文件夹底下的tacz文件夹里面就可以了。然而,这一举措(放在服务器根目录下的tacz文件夹中)在某些服务端上是不可行的,会造成枪包无法加载(/tacz reload根本读不到)。 在放置好枪包后第一次启动服务器之后,位于服务器根目录下的tacz文件夹中所有枪包均会被移动到一个同样名为tacz的文件夹中,而原文件夹中会多出一份名为tacz-pre.toml的文件,其内容如下: 1234[gunpack] #When enabled, the mod will not try to overwrite the default pack under .minecraft/tacz #Since 1.0.4, the overwriting will only run when you start client or a dedicated server DefaultPackDebug = false 将DefaultPackDebug的值改为true之后,枪包就不会被移动了。此时将被挪走的枪包挪...
iStoreOS防火墙放行特定IPv6流量进入内网
因为爱快用的太糟心,我将家里的主网关换成了iStoreOS的系统,但是两个系统的操作逻辑不大一样,导致很多配置的迁移遇到了比较大的阻力。几个例子: IPv6解析与通行默认阻断,设置藏得很深 自带的DDNS很容易出问题 内网DHCP设置不在网络-DHCP/DNS而是在网络-接口 …… 这里要详细展开的是关于iStoreOS(其实带LuCI的OpenWRT都一样)的防火墙如何有限地放行IPv6流量。 iStoreOS版本:24.10.2-2025070410 为什么要放行IPv6流量?默认情况下,对于外网主动访问的普通流量,OpenWRT的策略是直接阻断,这样能够保证内网中具有公网IP的设备(下文特指IPv6,毕竟国内没几个人家里内网能全是公网IPv4的吧……)不会在你没允许的情况下被外网访问。 然而,如果你内网有需要对外开放的应用,比如NAS或者博客,那么放行IPv6就相当的有必要,因为许多网关完全不支持IPv6栈的端口转发(不过iStoreOS倒是支持),毕竟公网v6唾手可得。更重要的是,这是一个学习OpenWRT防火墙策略与配置的大好机会。 位置侧栏:网络-防火墙 关键配...
Ubuntu netplan配置固定接口
对于不使用netplan的发行版,可以使用systemd方案或udev规则。 我不知道各位有没有碰到过类似的问题:你刚刚把你的Ubuntu计算机加好新硬件,插电开机(冷启动),然后SSH一登,Connection Timeout,回到本地一看,netplan给你写了份新的配置文件导致IP不同…… 究其原因,一个比较有说服力的解释是某些玄学的网口卸载逻辑导致冷启动时系统误以为这个接口已经有网口占着了,然后就自己创建了一份新的配置。实测下来这种情况基本上只在Ubuntu Desktop上出现,因为ubuntu-desktop才有这么一套自动配置机制。 想要解决其实相当简单,溜一遍参考文档,找到了一个好东西:match键。通过这个玩意儿,我们可以直接将一份netplan配置绑定到指定MAC地址的设备上(当然也可以通过设备名绑定,但是那样不大符合我们的初衷)。 例如,我的netplan配置文件(位于/etc/netplan下面的某个yaml文件)是这样的: 123456789101112network: version: 2 renderer: NetworkManager ...
强制重新安装Windows包管理器winget
省流1Add-AppxPackage {Microsoft.DesktopAppInstaller的appx安装包路径} -ForceApplicationShutdown -ForceUpdateFromAnyVersion 前情提要新买了一块1TB的系统盘,用傲梅分区助手做了一下系统迁移,进系统一看,发现Microsoft Store的应用怎么也没法安装了。 使用Add-AppxPackage呢?提示:找不到指定卷UUID。 反手一个查注册表,得,系统盘UUID被改过了。我是把系统分区和软件分区放在同一块物理盘上的,这两个分区在系统迁移之后UUID全变了。 手动改回来呢?重启完之后没有改善。按照Deepseek的指示删掉了整个记录UUID的项,重启,这下应用安装程序也不报错误码了,直接跟我说解析应用包时出错。 还能怎么办?重装系统解决99%的问题,直接保留文件重装。 重装完之后,在Microsoft Store里倒是可以正常安装了,但是应用安装程序还是照旧。 尝试重装时发生的问题既然现在能装UWP应用了,说明Appx系统算是修好了,问题就单纯出在应用安装程序上。Microso...
