C# 模仿性能监视器的数据结构
我正在为我们的软件开发一个定制的监控服务,它分布在几个系统上。我们已经决定在性能监视器中显示类似于报告视图的数据。 为了存储数据,我们使用一个非常简单的数据库表,它只保留最新的值:C# 模仿性能监视器的数据结构,c#,wpf,data-structures,C#,Wpf,Data Structures,我正在为我们的软件开发一个定制的监控服务,它分布在几个系统上。我们已经决定在性能监视器中显示类似于报告视图的数据。 为了存储数据,我们使用一个非常简单的数据库表,它只保留最新的值: |Server|Object|Instance|Query|Value| 因此,每个值都可以通过服务器、对象、实例和查询进行唯一标识。 一个例子可能是 |Server| Object |Instance| Query |Value| +------+------------+--------+--
|Server|Object|Instance|Query|Value|
因此,每个值都可以通过服务器、对象、实例和查询进行唯一标识。
一个例子可能是
|Server| Object |Instance| Query |Value|
+------+------------+--------+-----------+-----+
| Srv1 | Disk | C:/ | TotalSize |500GB|
| Srv1 | Disk | C:/ | FreeSpace | 50GB|
| Srv1 | Disk | C:/ | UsedSpace |450GB|
| Srv1 | Disk | C:/ | VolumeLbl | OS |
| Srv1 | Disk | D:/ | TotalSize |900GB|
| Srv1 | Disk | D:/ | FreeSpace |700GB|
| Srv1 | Disk | D:/ | UsedSpace |200GB|
| Srv1 | Disk | D:/ | VolumeLbl | Data|
| Srv1 | Performance| --- | CpuUsage | 12% |
| Srv1 | Performance| --- | MemUsage | 34% |
| Srv1 | Performance| --- | Processes | 64 |
现在我们要将其转换为:
Srv1
Disk
C:/ D:/
TotalSize 500GB 900GB
FreeSpace 50GB 700GB
UsedSpace 450GB 200gb
VolumeLbl OS Data
Performance
CpuUsage 12%
MemUsage 34%
Processes 64
我不知道应该用什么样的结构来存储它。
很容易看出对象(磁盘和性能)是服务器的子对象,但查询应该是实例的子对象,还是对象?在常规表中,每行是一个对象,列是该行的子对象。但我觉得在这种情况下应该是相反的,因为查询是实例的子对象。值应该存储在查询或实例下,还是应该是某种二维数组?
那么,基本上,实现这一点的最干净、最有效和最佳实践方法是什么
我们使用的是WPF,能够绑定到结构几乎是一项要求。因此,在CollectionChanged中仅使用ObservableCollections或自定义结构来实现这一点是第二个挑战。我看不出这有什么复杂之处。。为什么不创建一个ViewModel,以希望在屏幕上显示的方式表示数据,然后用查询结果填充数据呢?出于几个原因,我们不使用MVVM。视图是动态的,我不知道如何在运行时表示这些动态列。也许是因为我把事情复杂化了……你说的“视图是动态的”是什么意思?您是否在运行时通过代码实例化所有UIElement?这在WPF中是完全不必要的。我看不到任何不使用MVVM的正当理由(在WPF中,在其他框架中不知道)。不使用MVVM的原因是应用程序从一开始就不是使用MVVM构建的,我们既没有时间也没有人力来证明重写一些有效的东西是合理的。所谓动态,我的意思是对象、实例和查询都是从数据库中检索的:一个对象可以有多个查询和实例,有些查询甚至可能对某些实例无效。如果我使用MVVM,模型和视图模型会是什么样子?我在寻找“我应该如何存储它?”这个问题的答案,而不是我应该使用哪个框架。我仍然没有看到困难。。只需创建一个ServerViewModel(如果您不想将其称为ViewModel,则将其称为其他名称),它将有一个对象列表,其中每个对象可能有一个实例、一个查询和一个值。。