热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mysql实现异步读取文件_文件异步操作的实现

异步操作可以使我们的程序获得更优的性能,特别是对大文件进行处理时,这一点相信大家都知道。这里我写了一个示例。希望能给大家一个帮助。usingSystem

异步操作可以使我们的程序获得更优的性能,特别是对大文件进行处理时,这一点相信大家都知道。这里我写了一个示例。希望能给大家一个帮助。

using System.IO;

using System.Threading;

public class Form2 : System.Windows.Forms.Form

{

private System.Windows.Forms.Button button1;

private System.Windows.Forms.TextBox textBox1;

private System.Windows.Forms.ProgressBar progressBar1;

FileStream fs=null;

FileStream fsW=new FileStream("C://a.exe",FileMode.Create,FileAccess.Write,FileShare.Read);

int bufferLenth=1024*64;//将缓冲区定义为最少64k,在WIN平台上有很大的性能提高(性能分界线)

AsyncCallback cb=null;

byte[] bs=new byte[1024*64];

private System.Windows.Forms.TextBox textBox2;

///

/// 必需的设计器变量。

///

private System.ComponentModel.Container components = null;

public Form2()

{

//

// Windows 窗体设计器支持所必需的

//

InitializeComponent();

//

// TODO: 在 InitializeComponent 调用后添加任何构造函数代码

//

}

///

/// 应用程序的主入口点。

///

[STAThread]

static void Main()

{

Application.Run(new Form2());

}

///

/// 清理所有正在使用的资源。

///

protected override void Dispose( bool disposing )

{

if( disposing )

{

if(components != null)

{

components.Dispose();

}

}

base.Dispose( disposing );

}

#region Windows 窗体设计器生成的代码

///

/// 设计器支持所需的方法 - 不要使用代码编辑器修改

/// 此方法的内容。

///

private void InitializeComponent()

{

this.button1 = new System.Windows.Forms.Button();

this.textBox1 = new System.Windows.Forms.TextBox();

this.progressBar1 = new System.Windows.Forms.ProgressBar();

this.textBox2 = new System.Windows.Forms.TextBox();

this.SuspendLayout();

//

// button1

//

this.button1.Location = new System.Drawing.Point(368, 40);

this.button1.Name = "button1";

this.button1.Size = new System.Drawing.Size(136, 40);

this.button1.TabIndex = 0;

this.button1.Text = "button1";

this.button1.Click += new System.EventHandler(this.button1_Click);

//

// textBox1

//

this.textBox1.Location = new System.Drawing.Point(120, 48);

this.textBox1.Name = "textBox1";

this.textBox1.Size = new System.Drawing.Size(232, 21);

this.textBox1.TabIndex = 1;

this.textBox1.Text = "E://tools//CHS_MSDE2000A.exe";

//上面这个文件可以换掉,最好大一点的文件.

//

// progressBar1

//

this.progressBar1.Location = new System.Drawing.Point(72, 112);

this.progressBar1.Name = "progressBar1";

this.progressBar1.Size = new System.Drawing.Size(632, 40);

this.progressBar1.TabIndex = 2;

//

// textBox2

//

this.textBox2.Location = new System.Drawing.Point(56, 168);

this.textBox2.Multiline = true;

this.textBox2.Name = "textBox2";

this.textBox2.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;

this.textBox2.Size = new System.Drawing.Size(648, 272);

this.textBox2.TabIndex = 3;

this.textBox2.Text = "";

//

// Form2

//

this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);

this.ClientSize = new System.Drawing.Size(736, 485);

this.Controls.Add(this.textBox2);

this.Controls.Add(this.progressBar1);

this.Controls.Add(this.textBox1);

this.Controls.Add(this.button1);

this.Name = "Form2";

this.Text = "Form2";

this.ResumeLayout(false);

}

#endregion

private void button1_Click(object sender, System.EventArgs e)

{

//这个文件最好大一点

string fName =this.textBox1.Text;

//使用异步读取。缓冲区最好大于64k.不然性能更低

fs=new FileStream(fName,FileMode.Open,FileAccess.Read,FileShare.ReadWrite,bufferLenth,true);

cb=new AsyncCallback(ShowText);

this.progressBar1.Maximum=(int)fs.Length;

fs.BeginRead(bs,0,bufferLenth,cb,fs);

//开始异步读取文件

}

//异步回调的实现函数,当缓冲区数据读完毕后

public void ShowText(IAsyncResult result)

{

int rb=fs.EndRead(result);//获取最终得到的数据量。不一定是64*1024。最后一次可能小于这个数

fsW.Write(bs,0,rb);//将读到的数据写入到别一个地方。

this.progressBar1.Value=(int)(fs.Position);//设置进度条

if(rb

{

fsW.Flush();

fsW.Close();

fs.Close();

return;

}

fs.BeginRead(bs,0,bufferLenth,cb,fs);//如果还有数据再次读取64*1024字节

}



推荐阅读
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • OCI连接MySQL_PLSQL Developer连接远程数据库OCI客户端安装方法
    本文介绍了使用OCI客户端连接MySQL和PLSQL Developer连接远程数据库的安装方法,避免了在本地安装Oracle数据库或类似的开发套件的麻烦,同时解决了PLSQL Dev连接远程Oracle时的配置问题。 ... [详细]
  • 开发笔记:spring boot项目打成war包部署到服务器的步骤与注意事项
    本文介绍了将spring boot项目打成war包并部署到服务器的步骤与注意事项。通过本文的学习,读者可以了解到如何将spring boot项目打包成war包,并成功地部署到服务器上。 ... [详细]
  • 本文讨论了如何使用GStreamer来删除H264格式视频文件中的中间部分,而不需要进行重编码。作者提出了使用gst_element_seek(...)函数来实现这个目标的思路,并提到遇到了一个解决不了的BUG。文章还列举了8个解决方案,希望能够得到更好的思路。 ... [详细]
  • 使用freemaker生成Java代码的步骤及示例代码
    本文介绍了使用freemaker这个jar包生成Java代码的步骤,通过提前编辑好的模板,可以避免写重复代码。首先需要在springboot的pom.xml文件中加入freemaker的依赖包。然后编写模板,定义要生成的Java类的属性和方法。最后编写生成代码的类,通过加载模板文件和数据模型,生成Java代码文件。本文提供了示例代码,并展示了文件目录结构。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
author-avatar
BLUE1352_126
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有