难道C#文件写入还不如VB6,或是我的代码问题?

yusmt 2010-01-11 10:23:45
以下为C#与VB6在相同的路径保存相同的内容到一个文件中,表格中的数据共有2万多行,但是VB6的时间只有C#的一半左右,使用Debug及Release编译出来的EXE执行效果依然是C#要慢一半。
难道是C#的文件写入不如VB6吗,我测试读取相同的数据C#却要比VB6快许多。
或许是我的代码问题,请高手解惑,谢谢!
 StreamWriter srd = new StreamWriter(CommonDialog1Save.FileName, false, System.Text.Encoding.Default);

for (int i = 0; i < dataGridView1.RowCount; i++)
{
srd.WriteLine( dataGridView1[7 + 1, i].Value + "\t"+
dataGridView1[5 + 1, i].Value + "\t" +
dataGridView1[1, i].Value + "\t" +
dataGridView1[2, i].Value + "\t" +
dataGridView1[3, i].Value + "\t" +
dataGridView1[0, i].Value + "\t" +
dataGridView1[5, i].Value );


}
srd.Close();



Open CommonDialog1.FileName For Output As #1

dim strText as String
For aa = 0 To GridView.Rows - 1
strText = ""
For bb = 1 To GridView.Cols - 1

strText = strText & Trim(GridView.TextMatrix(aa, bb)) & Chr(9)

Next
Print #1, strText
Next

Close #1
...全文
194 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
天地英豪 2010-01-13
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zanfeng 的回复:]
这简单是费话。vb6是编译程序,c#是解释程序。当然是vb6快。
[/Quote]
13楼不对。
vb6才是解释程序,C#是编译程序,只不过C#要用框架才能运行起来!
csdn_风中雪狼 2010-01-12
  • 打赏
  • 举报
回复
字符串拼接导致效率低下

yulinlover 2010-01-12
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 vrhero 的回复:]
引用 13 楼 zanfeng 的回复:
这简单是费话。vb6是编译程序,c#是解释程序。当然是vb6快。

这可不像个星星该说的话...

原因就是11楼说的,是反射效率较低...
[/Quote]

hzxsasdfgh 2010-01-12
  • 打赏
  • 举报
回复
mark
snria 2010-01-12
  • 打赏
  • 举报
回复
学习了.
vrhero 2010-01-12
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zanfeng 的回复:]
这简单是费话。vb6是编译程序,c#是解释程序。当然是vb6快。
[/Quote]
这可不像个星星该说的话...

原因就是11楼说的,是反射效率较低...
ren_china 2010-01-12
  • 打赏
  • 举报
回复
路过,看看
gghlkk 2010-01-11
  • 打赏
  • 举报
回复
试试 直接去操作dataGridView1的DataSource 比一个一个来取值要快多了
苏飞论坛 2010-01-11
  • 打赏
  • 举报
回复
建议你把写入的方式改一下,写入的方法不一样肯定不一样啊,这就相信当于,两个人在同一地点,都要去北京,一个人是走的,一个要是坐飞机,然后到地方的时候你问为什么不是一起到的,呵呵
tyy283 2010-01-11
  • 打赏
  • 举报
回复
路过
yusmt 2010-01-11
  • 打赏
  • 举报
回复
根据geniusatm4所说,就写2W行一样的固定字符串
我分别在VB6及C#中保存2500个以下的字符串
For aa = 0 To 25000
Print #1, "abcdefghijklmnopqrstuvwxyz-abcdefghijklmnopqrstuvwxyz" 'bbb
Next

 for (int i = 0; i < 25000; i++)
{
srd.WriteLine("abcdefghijklmnopqrstuvwxyz-abcdefghijklmnopqrstuvwxyz");
}

在我的电脑中的测试结果如下
VB使用了0.07812秒
C#中使用了0.031秒
看来应该是C#更快一点,我首楼的代码测试所以会慢是因为更多的时间消耗在向dataGridView1表格是提取数据中,但是我这个数据必须要提取啊,有没有快点的方法?
yusmt 2010-01-11
  • 打赏
  • 举报
回复
//不知刚才为什么不能上CSDN
我现在将代码改成了以下,为了更整确的测试,我记录的运行的时间,与我开始的代码比较并没有任何效率的提高。
运行第1次保存25000行使用了5.375秒,第2次及以后保存则只需要2.267秒(运行EXE以后第一次保存总是要慢过以后的保存)
而使用VB6我以上的代码保存无任是否编译都只需要1.3906秒左右。

for (int i = 0; i < dataGridView1.RowCount; i++)
{
strText.Append(dataGridView1[8, i].Value + strFGH +
dataGridView1[6, i].Value + strFGH +
dataGridView1[1, i].Value + strFGH +
dataGridView1[2, i].Value + strFGH +
dataGridView1[3, i].Value + strFGH +
dataGridView1[0, i].Value + strFGH +
dataGridView1[5, i].Value + (char)13 + (char)+10);
}
srd.WriteLine(strText.ToString());
geniusatm4 2010-01-11
  • 打赏
  • 举报
回复
.......你一次取画面上这么多内容。当然慢了

真要测 就写2W行一样的固定字符串。。
波导终结者 2010-01-11
  • 打赏
  • 举报
回复
当然不一样,你VB是用strText存储,一次性写入
而C#却是用srd.WriteLine频繁读写

你先把c#代码里的读取和写入分开,并用stringbuilder试试看
yusmt 2010-01-11
  • 打赏
  • 举报
回复
代码有什么不同?只是VB6在mshflexgrid控件中读数据,C#在datagridview控件中读数据
,这两段代码写出来的是完全相同的文件。
波导终结者 2010-01-11
  • 打赏
  • 举报
回复
是啊,你两个代码的循环和写入方式都不一样,怎么比

把c#代码里的读取和写入分开,并用stringbuilder试试看,可能是频繁读取dataGridView1或者字符串拼接导致效率低下
zetee 2010-01-11
  • 打赏
  • 举报
回复
顶你~代码都不同,何来的性能对比。
足球中国 2010-01-11
  • 打赏
  • 举报
回复
这简单是费话。vb6是编译程序,c#是解释程序。当然是vb6快。
yusmt 2010-01-11
  • 打赏
  • 举报
回复
谢谢各位,在这个项目中,DataGridView的DataSource是在一个方法中临时的ArrayList数据集,现在我将这个ArrayList定义在类模块中,然后保存文件时读取的是ArrayList中的值,速度快了N倍,
现在保存相同文件的速度已由开始的5.375秒减少到0.125秒了(天啊,太快了,呵呵!!!)
danjiewu 2010-01-11
  • 打赏
  • 举报
回复
DataGridViewCell的Value应该是通过反射来取值的,速度会慢一些
如楼上所说直接从DataSource或者DataGridViewRow的DataBoundItem取值应该会快很多

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧