gpt4 book ai didi

winforms - 在 GUI 线程上加载和保存应用程序配置

转载 作者:行者123 更新时间:2023-12-01 00:40:28 25 4
gpt4 key购买 nike

在 GUI 应用程序中保存和加载用户/应用程序设置的常用方法如下所示:

private void FormMain_Load(object sender, EventArgs e)
{
m_foo = Properties.Settings.Default.Foo;
}

private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
{
Properties.Settings.Default.Save();
}

乍一看,这看起来很合理。然而,一旦您考虑到保存和(隐式)加载操作中实际发生的事情,即磁盘 I/O,它就会显得有点可疑。这是否违背了一般情况下避免潜在长时间运行的操作,尤其是 GUI 线程上的 I/O 的原则?

我意识到在绝大多数情况下我们谈论的是位于本地硬盘驱动器上的非常小的文件,但我可以想出这样的场景:如果我真的想要(磁盘被置于休眠状态,磁盘处于压力之下,磁盘实际上是网络存储等)。

另外,我不清楚我应该怎么做。启动很容易处理,在异步加载设置时禁用 GUI。但是关闭事件呢?当然,我可以取消事件,异步保存,然后自己关闭它,但它变得有点困惑,因为我需要处理用户在我完成保存之前再次尝试关闭它的情况(所以我不会启动另一个保存,或在保存过程中退出等)。而且我不确定它甚至可以在其他框架中完成(至少简单地),比如 GTK#,其中通常在为时已晚时使用 OnDeleteEvent。我想我可以触发一个前台线程并将其保存在那里,但随后用户可能会认为应用程序已关闭并在实际保存设置之前再次运行它(无论如何,如果它的多个实例处于事件状态可能会产生其他后果)。

我应该担心这种情况还是我想得太多了?

最佳答案

你想多了。大概是基于保存设置很慢的假设。它不在 Winforms 应用程序中,您没有在移动设备上运行此应用程序。文件写入总是由文件系统缓存缓存,只不过是内存到内存的副本。它们以内存总线速度运行,最慢时为 5 GB/秒(旧 DDR2),通常约为 35 GB/秒。

之后,文件系统驱动程序将更改延迟写入磁盘,高度优化以最大限度地减少写入磁头的移动。写入高达 ~1 GB 可以适合现代机器,如果它有足够的 RAM,则更多。比 user.config 文件所需的多 6 个数量级。

任何将其转变为异步写入的优化都无法使您的应用程序的响应速度优于毫秒,人类完全无法观察到。这也是 System.Configuration 不支持的原因。你没有真正的问题。

关于winforms - 在 GUI 线程上加载和保存应用程序配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25664286/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com