【发布时间】:2015-02-18 18:22:55
【问题描述】:
我正在尝试使用 datagridview 将二进制文件读入我自己的十六进制编辑器。
这是我最初的方法
FileStream RawD = new FileStream(ECUFileName, FileMode.Open, FileAccess.Read);
BinaryReader RawB = new BinaryReader(RawD);
然后我也尝试了二进制阅读器......
现在我正在使用
MemoryMappedFile RawD = MemoryMappedFile.CreateFromFile(ECUFileName);
MemoryMappedViewStream stream = RawD.CreateViewStream();
BinaryReader RawB = new BinaryReader(stream);
我想要代码做的就是读取小数并将其放入数据网格视图中。 一个 2mb 的文件需要很长时间。
while (RawB.BaseStream.Position <= RawB.BaseStream.Length)
{
if (term == true) break;
DataGridViewRow row = (DataGridViewRow)DataG.Rows[0].Clone();
DataG.Rows.Add(row);
for (int P = 0; P < I; P++)
{
if (RawB.BaseStream.Position == RawB.BaseStream.Length) break;
Int16 Byte = RawB.ReadInt16();
string ByteStr = string.Format("{0}",Byte);
DataG[P, X].Value = ByteStr;
DataG[P, X].ReadOnly = true;
string ADR = string.Format("{0:x6}", X * 10); ;
DataG.Rows[X].HeaderCell.Value = ADR;
DataG.FirstDisplayedScrollingRowIndex = DataG.FirstDisplayedScrollingRowIndex + 1;
if (term == true) break;
}
我刚试过,好像快一点
byte[] bytes = File.ReadAllBytes(ECUFileName);
for (int i=0; i <= bytes.Length; i++)
{
string result = Convert.ToString(bytes[i]);
richTextBox1.AppendText(result);
}
be hex editor 不能用于我打算做的事情,所以我必须手动去做。
我读过很多文章,人们说用文件方法读取 AllBytes,将文件存储在内存中, 当我尝试使用文件方法时,它的工作速度也不快。
【问题讨论】:
-
你的缓慢来自于使用网格,而不是读取文件。
-
您的 MemoryMapped 方法是否更快? (似乎不太可能)。
-
您是否尝试将数据加载到 DataTable 中并将其用作 DataGridView 的数据源?
-
对于一个 2MB 的文件,我无法获得比约 10 秒更快的速度。您必须分页或使用 VirtualMode。
标签: c# datagridview hex hexdump