asp.net C# 如何实现在服务器上拷贝文件时,控制拷贝速度
C#写了一个控制台程序,想放到服务器上,对自定义的文件夹进行时时监控,如果发现有新的文件,则自动拷贝到另一个文件夹中。考虑到服务器的负载,想对文件拷贝的速度做一个限制,请教该如何实现啊
补充:通过了解 该问题转变为 :http://zhidao.zhaoxi.net/question/274232755.html
如有解决方案 分数全部奉上 在线等
追问:能说详细点么 最好有控制的代码实现 因为我不怎么懂C#控制线程的API上面的程序已经做了定时器了 现在程序运行的原理就是跟你说的一样的 我也不知道为什么要做限制 因为那个程序是放在我们网站的服务器上的 网站需要的流量很大 师傅交代下来的任务,说要考虑到速度限制问题 所以我也不知道该怎么弄
答案:还是不太理解你的意思,如果拷贝到同一服务器的另一个文件夹,我觉得没必要限速,毕竟这个操作不是太占资源。如果是网络路径上的另一个文件夹,如果是内网上的机器,而服务器对外网的流量大,那也不影响,毕竟2者的速度差距很大。如果本来就是内部网站,而内部流量很大或者传到外网上的机器或者你一定想要限速。。好吧。。如同之前有人说的另起个线程:
Thread t1 = new Thread(new ThreadStart(CopyFile));
t1.start();
下面定义一个private void CopyFile()方法,然后把执行拷贝的代码写进去,然后可以检测I/O流如每传完500K后Thread.sleep(1000);
这是比较简单的办法,但是因为没有关闭过I/O流,所以只对降低网络资源占用有效
其他:可以在单位时间传递了一定数据流后就暂停线程 如每传完500K后 就让线程暂停1s 这个貌似涉及到系统级别的消息监听了,hook 系统消息吧,我也没做过 做一个定时器,每隔一段时间间隔就查看一次指定文件夹,并且保存这一次的文件目录。如果两次监视结果不一致,就把额外的文件拷贝到另一个文件夹。在这里不说代码,直说关键函数:
Directory.GeiFiles(string dir); //获取指定文件夹内的所有文件
File.Copy(string source,string target); //从source位置复制文件到target位置
另外,C#不好控制文件拷贝速度。究竟是什么样的所谓"服务器负载",需要去限制文件拷贝速度?理论是要结合实际的,服务器IO并发量真的超过了什么负载了么?与其实现什么限制速度,不如实现最大功能并发量得控制靠谱点。
上一个:asp中把数据库中的数据以xml文档的形式导出
下一个:js 写cookes asp读取