小编srs*_*esh的帖子

优化/读取/写入共享resoruce的最佳方式

我需要的一个是管理共享资源(更像是一个日志,同时具有读写操作)

在应用程序中的不同进程(因此也是多个线程)之间.数据也应该是

持续系统重启,因此它应该是一个物理文件/数据库.

共享资源是一些具有密钥值信息的数据.(因此可以使用此共享资源执行的可能操作是添加新的键值信息,

更新/删除现有的键值信息).

因此,我正在考虑使用xml文件物理存储信息,样本内容将

看起来像 ,

<Root>
   <Key1>Value</Key1>
   <Key2>Value</Key2>
   <Key3>Value</Key3>
</Root>
Run Code Online (Sandbox Code Playgroud)

执行读取和操作的界面将如下所示,

    public interface IDataHandler
    {
       IDictionary<string,string> GetData();
       void SetData(string key,string value);
    }
Run Code Online (Sandbox Code Playgroud)

我可以假设数据不会超过500 MB因此xml决定,如果数据增长,我将把它移动到DB.而且,与读取操作相比,数据的写入将更多.

与上述场景相关的查询/设计考虑很少,

可以在xml文件中处理500 MB的数据吗?

假设文件为xml,现在如何处理性能考虑?

  • 我正在考虑将数据缓存(.Net中的MemoryCache类)作为Dictionary,这将启用

为了在读取操作期间实现性能,可以在内存中缓存500 MB的数据,还是我们

还有其他选择吗?

  • 现在,如果我使用上面的缓存机制,在写操作期间应该发生什么:

  • 我应该通过转换,在每次写操作期间再次将字典内容写入xml

整个字典到xml?或者 - 有没有办法只更新其数据被修改/添加的xml文件的一部分?或任何

处理这种情况的其他方法? - 我应该通过将写操作放入队列和后台来再次提高性能

线程读取队列并启用实际的写操作,以便实际写入数据的人

因为写入文件会不会受到影响? - 要处理多线程场景,计划使用具有全局名称的Mutex,还有其他任何方案

更好的方法吗?

我确信,我操作的假设很少,并试图从那里建造,如果我错了

某些假设会改变大部分设计概念.因此,全新的解决方案也是

欢迎(保持表现为主要标准).提前致谢.

c# optimization performance file-io multithreading

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

在 C# 中处理时区

我需要实现的是,显示带有组合框(包含所有时区)的 UI,以及组合框下方的复选框。仅当时区(选定的组合框项)支持夏令时时才应显示该复选框。还可以在呈现 UI 控件时根据上次配置选中/取消选中复选框。

现在 C# 中的 TimeZoneInfo 类允许我获取时区列表(组合框的数据)。但是 TimeZoneInfo 类中的 SupportsDayLightSaving 属性在 Checkbox 被选中时显示为 true,当没有复选框或 Checkbox 未选中时为 false

那么我如何通过 C# 确定,

1.时区是否支持DayLightSavingTime(例如:印度标准时间不支持夏令时) 2.是否启用夏令时(勾选/取消勾选)时区是否支持夏令时。

编辑:如果我之前没有正确解释,这里是更详细的信息。我想做的事 :

  1. 显示/隐藏复选框(做出此决定的条件是什么)
  2. 如果显示复选框,则选中/取消选中复选框(做出此决定的条件是什么)。

PS:根据 MSDN SupportsDaylightSavingTime 属性,如果复选框被选中,该值将为 true,如果复选框未选中或时区不支持 DST,则值为 false。有了这个属性,如果值为 false,那么我无法确定是隐藏复选框还是显示它并取消选中复选框。例如:对于印度标准时间,我不应该显示复选框,为此,如果我必须依赖属性值,那么我会将其设为 false 并且我可以隐藏它。但考虑到我们有柏林时区(+1 UTC),使用控制面板设置取消选中复选框,然后我将属性值检索为 false 并应用上述逻辑将隐藏复选框,但在这里我想显示未选中状态的复选框。

编辑答案:看起来我无法正确解释问题,对此我深表歉意。经过长时间的谷歌搜索和搜索,我可以看到 .NET 没有提供 API 来支持我的需求。因此提出了一个解决方案,

检查 SupportsDaylightSavingsTime 属性是否为 true ,如果然后显示选中状态的复选框。如果上述属性值为 false ,则检查注册表中的 DynamicDaylightTimeDisabled 值 (HKLM\System\CurrentControlSet\Control\TimeZoneInformation)。因为这里的 false 并不意味着时区不支持 DST,而是也可以禁用它。如果值为 1,则显示未选中状态的复选框(因为它支持 DST 但目前已禁用)。如果值为 0 ,则不显示复选框。(因为时区不支持 DST)。

    //get the time zone info for the currently selected time …
Run Code Online (Sandbox Code Playgroud)

.net c# wpf timezone

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

标签 统计

c# ×2

.net ×1

file-io ×1

multithreading ×1

optimization ×1

performance ×1

timezone ×1

wpf ×1