如何模拟慢读和慢读磁盘驱动器

如何模拟慢读和慢读磁盘驱动器,第1张

概述如何模拟慢读和慢读磁盘驱动器

我需要检查我的windows应用程序,看看它如何在具有慢磁盘的系统上工作。 我怎样才能有一个模拟缓慢的磁盘,windows不caching它的内容,所以我可以重复我的testing?

更新:我有很多代码访问磁盘,不能创build新的类来模拟慢光盘,部分代码是第三方,没有源代码访问。

更新2:我也需要减慢Directory.Getfiles()的速度。

如何显示windowslogin对话框?

在GetResponse之前将httpWebRequest视为string,而不使用fiddler

确定是否在.NET中共享文件夹

在这个exception消息中引用了什么“配额”:没有足够的配额可用于处理此命令

在Win7 Aero主题中增加DateTimePicker日历的字体大小

如何控制.NET服务引用的文件名?

如何从PowerShell中访问Web服务?

检查windows用户或组是否存在,支持域名

在确定菜单项目的位置时是否有任何标准要遵循?

我可以使用单声道的AOTfunction本地“预编译”.NET DLL / EXE,使他们更难以逆向工程?

您可以在Stream上创建缓慢的装饰器 ,这将会延迟执行一些(或全部) *** 作:

public class SlowStream : Stream { private Stream _stream; private TimeSpan _delay; public SlowStream(Stream stream,TimeSpan delay) { _stream = stream; _delay = delay; } // implementation }

在实现流成员时,您应该将一些 *** 作直接委托给装饰流

public overrIDe bool CanRead { get { return _stream.CanRead; } } public overrIDe voID Flush() { _stream.Flush(); } public overrIDe voID Close() { _stream.Close(); }

但是在你想要慢的其他 *** 作之前,

public voID Wait() { Thread.Sleep(_delay); } public overrIDe int Read(byte[] buffer,int offset,int count) { Wait(); return _stream.Read(buffer,offset,count); } public overrIDe voID Write(byte[] buffer,int count) { Wait(); _stream.Write(buffer,count); }

用法:

using(var stream = file.Open(filename,fileMode.Open)) { var slowStream = new SlowStream(stream,TimeSpan.FromSeconds(1)); var reader = new StreamReader(slowStream); string line; while((line = reader.Readline()) != null) Console.Writeline(line); }

如果你有源代码,你可以编写一个模拟磁盘行为的类,并用你的类的调用来替换所有的磁盘读/写代码。

您需要缓存由应用程序完成的请求,并在延迟之后执行它们。

如果你没有访问代码,你希望找到一个模拟慢磁盘的驱动程序…如果存在的话。

您可以使用虚拟机并节制磁盘访问…以下是有关如何在VirtualBox 5.8中执行 *** 作的一些提示。 限制磁盘映像的带宽https://www.virtualBox.org/manual/ch05.HTML#storage-banDWIDth-limit

我认为MS和VMWare虚拟化工具提供了类似的功能。

感谢谢尔盖的回答,但是在某些情况下,它可以用更少的代码和没有装饰器来完成 – 只需从所需的Stream对象继承,并延迟地覆盖Read方法。 下面是在类似情况下足够满足我需求的示例类:

public class SlowStream : MemoryStream { private Readonly TimeSpan _delay; public SlowStream(byte[] buffer,TimeSpan delay) : base(buffer) { _delay = delay; } public overrIDe int Read(byte[] buffer,int count) { Thread.Sleep(_delay); return base.Read(buffer,count); } }

总结

以上是内存溢出为你收集整理的如何模拟慢读和慢读磁盘驱动器全部内容,希望文章能够帮你解决如何模拟慢读和慢读磁盘驱动器所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1285690.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存