数据空间
计算机经常做的一件事情就是把数据从一个空间传输到另一个空间中去. 比如: 从硬盘到内存, 从内存到显存. 在内存中, 数据也经常从内核空间复制到用户空间, 从一个进程复制到另一进程. 那么首先要做的就是, 定义空间. 数据空间代表了数据的存储方式. 每个空间必须有唯一的地址.
映射
映射表示如何把数据从一个数据空间传输到另一个数据空间. 映射定义的是规则, 需要的参数是数据空间的地址.为方便映射, 每个空间通常都定义原点. 最常见的映射就是把一些数据点绘制到屏幕上, 如果鼠标拖动一些屏幕上的点, 底层数据也改变. 这就是从"数据"和"屏幕平面"之间的映射.
映射一般有2个空间(上面就是: 业务数据和屏幕), 常见的属性有:
A空间原点,
B空间原点,
A<->B的互相转换因子,
A空间的数据=>B空间数据
B空间数据=>A空间数据
比如:
public interface ITimeScale
{
DateTime DateTimeOrigin { get; set; }
Point PointOrigin { get; set; }
double TimeSpan2DistanceRatio { get; set; }
Point DateTimeToPoint(DateTime datetime);
DateTime PointToDateTime(Point point);
double TimespanToDistance(TimeSpan timespan);
TimeSpan DistanceToTimespan(double distance);
}
传输
数据是以什么方式被从一个空间传输到另一个空间的? 其实这里有一个被忽略的传输空间. 数据首先从源空间复制到传输空间, 然后从传输空间复制到目的空间. 比如: 一个Web系统, 数据会从服务器空间复制到浏览器空间, 中间的传输空间就是HTTP字符流. 从业务的层面上应该尽量忽略这个空间, 从实现的层面上看, 数据会从服务器空间映射到HTTP字符流, 然后又从HTTP字符流映射到浏览器的DOM树.
传输空间要解决的问题是: 格式(包含版本信息)和性能, 即数据能被双方空间识别, 传输的数据量尽可能少.
运行速度
提高运行速度的基本思路是:
- 在进行实际计算之前, 尽量剔除不必要的计算和拷贝.
- 进行缓存, 用空间换时间.