加载数据量很大,如何提高加载数据速度
加载数据量很大,怎么提高加载数据速度?
加载了一个大容量的TXT文本,目前我用的是分块映射操作。每加载一块,在其中有判断数据正确与否,计算,描点画图等。感觉速度还是不够快速,大家可有更好的方法来提高速度??谢谢了!
------解决方案--------------------
你的 分块映射操作 是怎么操作?是用内存映射文件吧.
只加载用户可以看到的就行了.
------解决方案--------------------
流操作会快点且方便点,要不写成数据库呗
------解决方案--------------------
双缓冲方式,分配两块大小一样的内存,从文本文件读入数据到第一个缓冲,在对第一个缓冲数据进行判断数据正确与否,计算,描点画图等时可以加载文本数据到第二个缓冲,依次处理直至完成。
------解决方案--------------------
用内存文件操作吧!兄弟;
------解决方案--------------------
就算全部数据都加载,用户能看到多少??屏幕像素也就是横向2000多.有一万个数据难道还在一个像素上画出三五个点不成??
------解决方案--------------------
用文本保存的数据肯定慢啊。数据读进来后需要做文本至数字的转换,这很耗费时间。应该保存成二进制数据,用 stream 读进来,再借助 Move 函数取数据。数据结构可以自己设计,例如:
TGraphItem = packed record
Kind: Word;
X1, Y1, X2, Y2: Integer;
Color: TColor;
end;
这个例子很简单,只为了说明问题。无论多么复杂,其中所有成员都要采用定长数据类型,不能用 string 这样的不定长类型。这样,整个 TGraphItem 也就是定长类型,可以用 Move 函数来操作,无需做任何数据类型转换。Move 编译后会转换成速度非常快的机器代码。
加载了一个大容量的TXT文本,目前我用的是分块映射操作。每加载一块,在其中有判断数据正确与否,计算,描点画图等。感觉速度还是不够快速,大家可有更好的方法来提高速度??谢谢了!
------解决方案--------------------
你的 分块映射操作 是怎么操作?是用内存映射文件吧.
只加载用户可以看到的就行了.
------解决方案--------------------
流操作会快点且方便点,要不写成数据库呗
------解决方案--------------------
双缓冲方式,分配两块大小一样的内存,从文本文件读入数据到第一个缓冲,在对第一个缓冲数据进行判断数据正确与否,计算,描点画图等时可以加载文本数据到第二个缓冲,依次处理直至完成。
------解决方案--------------------
用内存文件操作吧!兄弟;
------解决方案--------------------
就算全部数据都加载,用户能看到多少??屏幕像素也就是横向2000多.有一万个数据难道还在一个像素上画出三五个点不成??
------解决方案--------------------
用文本保存的数据肯定慢啊。数据读进来后需要做文本至数字的转换,这很耗费时间。应该保存成二进制数据,用 stream 读进来,再借助 Move 函数取数据。数据结构可以自己设计,例如:
TGraphItem = packed record
Kind: Word;
X1, Y1, X2, Y2: Integer;
Color: TColor;
end;
这个例子很简单,只为了说明问题。无论多么复杂,其中所有成员都要采用定长数据类型,不能用 string 这样的不定长类型。这样,整个 TGraphItem 也就是定长类型,可以用 Move 函数来操作,无需做任何数据类型转换。Move 编译后会转换成速度非常快的机器代码。