UltraEdit:有传统的读进内存和不读进内存,谈那种不读进内存的方式,用的是把文件当内存映射还是根据滚动条(好像也是单独的滚动条,不是文本框自带的那个)状态即使定位文件流读取数据或其它方式?
WinHex:这个更是神速了,开几G的文件,怎么拉滚动条定位连半点延迟都没有!
咋回事了,两样能比较简单的实现一样就可以,麻烦知道的给点思路把!我用C#
WinHex:这个更是神速了,开几G的文件,怎么拉滚动条定位连半点延迟都没有!
咋回事了,两样能比较简单的实现一样就可以,麻烦知道的给点思路把!我用C#
全载入文本框是完全排除的,那样顶多100MB!
看来多半要类似listview那种虚拟载入,不用不载,用啥载啥的办法!
还有数据库也是那么玩的!
但不管怎么说!差不多功能,WinHex的速度简直就是光速,没用过的人试下,打开几个G的文件,估计与开几十G的没有区别,让用户的速度感就像用计事本打开几K的文件差不多!
大家一起想想,提供一些好的思路,咋们实现了它!以后一定用的着!
var
f:TextFile;
i:Integer;
begin
i:=0;
Assign(f, szFile);
Reset(f);
if nLine=-1 then
while not Eof(f) do
begin
Inc(i);
ReadLn(f, Result);
end
else
while (not(Eof))and(i<nLine) do
begin
Inc(i);
ReadLn(f, Result);
end;
CloseFile(f);
nLine:=i;
end;
我用过这个函数,网上找到,速度很快,读取指文本指定行,先计算文本的总行数,自己做滚动条,用总函数和现实的行数来确定滚动条的步进大小,再读取一定范围行数的文本,比如连续10行或者20。
其它文件划分数据块,滚动条用来指定读取流动起始位置和偏移,和这个类似,你先试试。
这个是局部载入,全载入的话,要10-20秒.我已经自己实现,也是光速光速!其实是很简单的,只是没动手,想的太多了,跟我之前猜测一样,就是流定位读很少的部分仍然感谢大家的发言.哎现在的心太不好,这么简单的问题说一下,兄弟门都要少走不少弯路,虽然都是地球人,但那个不小心
真的成了billgates不但不会影响你的饭碗,遇到像我这样的一定还会报答你!关键代码,只测试了下,整行判断等其它东西我慢慢加全!写功能还没加!但速度光速!大家开个几G的文件看下!少走弯路!大家再多看看,能有啥新思路和想法,一起讨论提高提高!:
(\r\n问题,\n富文本框当作换行和文本框不当作换行,\r\n都当作!)
private void button1_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
textBox2.Text = openFileDialog1.FileName;
fs = new FileStream(textBox2.Text, FileMode.Open, FileAccess.Read);
vScrollBar1.Maximum = (int)fs.Length;
}
}
private void vScrollBar1_Scroll(object sender, ScrollEventArgs e)
{
try
{
fs.Seek(e.NewValue, SeekOrigin.Begin);
int nBytes = 2048;
byte[] ByteArray = new byte[nBytes];
int nBytesRead = fs.Read(ByteArray, 0, nBytes);
richTextBox1.Text = Encoding.ASCII.GetString(ByteArray);
}
catch
{ }
}