- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个由数千个中型(数百字节)对象组成的数据结构,每个对象代表一个较大数据集的一个子集。由于多种原因(分析大型范围时的复杂性、垃圾收集器的压力等),这不是最佳选择。
从概念上讲,您可以想象对象代表一天的气象数据,而整个数据集是一年(比方说)的数据。简单的例子:
class YearData
{
private readonly DayData[] days = new DayData[365];
public DayData GetDayData(int dayNumber)
{
return days[dayNumber];
}
}
class DayData
{
private readonly double[] temperatures = new double[24];
public double GetTemperature(int hour)
{
return temperatures[hour];
}
public void SetTemperature(int hour, double temperature)
{
temperatures[hour] = temperature;
}
}
在重构工作中,我尝试将数据移动到表示整个数据集的单个对象,但为了保持其余代码不变(且简单),我需要表示数据子集/段的对象。示例:
class YearData
{
private readonly double[] temperatures = new double[365*24];
public DayData GetDayData(int day)
{
return new DayData(this, day);
}
internal double GetTemperature(int day, int hour)
{
return temperatures[day*24 + hour];
}
internal double SetTemperature(int day, int hour, double temperature)
{
temperatures[day*24 + hour] = temperature;
}
}
class DayData // or struct?
{
private readonly YearData yearData;
private readonly int dayNumber;
public DayData(YearData yearData, int dayNumber)
{
this.yearData = yearData;
this.dayNumber = dayNumber;
}
public double GetTemperature(int hour)
{
return yearData.GetData(dayNumber, hour);
}
public void SetTemperature(int hour, double temperature)
{
yearData.SetData(dayNumber, hour, temperature);
}
}
这样我就可以拥有一个巨大且生命周期长的对象,并且我可以保留许多生命周期短的小对象用于数据分析。 GC 更快乐,直接对整个数据集进行分析现在不那么复杂了。
我的问题是,首先:这个模式有名字吗?看起来应该是很常见的模式。
其次(特定于 .NET):段对象非常轻量且不可变。这是否使其成为结构的良好候选者?其中一个结构字段是引用重要吗?对看似可变但实际上不是可变的类型使用结构是否是一种错误的形式?
最佳答案
非常有趣的问题和方法!
我不确定,但我认为这些模式可以被认为是一个Flyweight
和一个Adapter
。
- Use sharing to support large numbers of fine-grained objects efficiently.
- The Motif GUI strategy of replacing heavy-weight widgets with light-weight gadgets.
temperatures
数组存储在 YearData
中,可以看作是 DayData 工厂。
- Convert the interface of a class into another interface clients expect. Adapter lets classes work together that couldn’t otherwise because of incompatible interfaces.
- Wrap an existing class with a new interface.
- Impedance match an old component to a new system
因此,通过以这种方式公开DayData
,您就提供了客户想要的接口(interface)
此外,我不确定 DayDate 是否是一个结构,您可以在 this answer 中查看关于何时以及如何使用结构的很好的解释。
关于c# - 较大数据集的子集 View 的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15146071/
我正在通过 PHP 将 .csv 中的两行插入到表中。 我还会跟踪任何错误,如果发生错误,我不会提交事务。插入表后,我检索结果行的 ID(全部在一个事务中提交),并且 csv 的第一行对应于第二个 I
一个应用程序托管一个具有三个接口(interface)的 Web 服务,用于三个单独且独立的操作,所有这些操作都在应用程序的不同组件中实现,彼此独立,例如在不同的包等中,所以他们对彼此了解不多,只共享
我希望在单击特定表格数据单元格时同时选中单选按钮和单选按钮单击事件。我已经使用以下方法实现了这一点: $(document).ready(function() { $("td").click(
JSFiddle:https://jsfiddle.net/oyp1zxaq/ 本质上,我只是想在较大的 div 中放置四个具有定义宽度的较小 div,但我希望它们在其中间隔开。 我想知道是否有一种方
我在一个布局中有两个 View 。我将分别称它们为 View A 和 View B。 ┌──────┐ │┌─┐┌─┐│ ││A││B││ │└─┘└─┘│ └──────┘ 父布局(包括View A
我是一名优秀的程序员,十分优秀!