Che*_*eso 7 .net c# windows filesystems testing
为了测试压缩,我需要能够创建大文件,理想情况下是文本,二进制和混合格式.
为了创建二进制文件,我可以新建一个大缓冲区并在循环中执行System.Random.NextBytes后跟FileStream.Write,如下所示:
Int64 bytesRemaining = size;
byte[] buffer = new byte[sz];
using (Stream fileStream = new FileStream(Filename, FileMode.Create, FileAccess.Write))
{
while (bytesRemaining > 0)
{
int sizeOfChunkToWrite = (bytesRemaining > buffer.Length) ? buffer.Length : (int)bytesRemaining;
if (!zeroes) _rnd.NextBytes(buffer);
fileStream.Write(buffer, 0, sizeOfChunkToWrite);
bytesRemaining -= sizeOfChunkToWrite;
}
fileStream.Close();
}
Run Code Online (Sandbox Code Playgroud)
使用足够大的缓冲区,比方说512k,这相对较快,即使对于超过2或3gb的文件也是如此.但内容完全是随机的,这不是我想要的.
对于文本文件,我采用的方法是使用Lorem Ipsum,并通过StreamWriter将其重复发送到文本文件中.内容是非随机且不均匀的,但它确实有许多相同的重复块,这是不自然的.此外,由于Lorem Ispum块非常小(<1k),因此需要很多循环并且需要非常长的时间.
这些都不是我满意的.
我已经看到了在Windows系统上快速创建大文件的答案?.这些方法非常快,但我认为它们只是用零或随机数据填充文件,这两者都不是我想要的.如果需要,我可以运行像contig或fsutil这样的外部进程.
测试在Windows上运行.
而不是创建新文件,仅使用文件系统中已存在的文件更有意义吗?我不知道任何足够大的东西.
如何从单个现有文件开始(对于文本文件可能是c:\ windows\Microsoft.NET\Framework\v2.0.50727\Config\enterprisesec.config.cch)并多次复制其内容?这适用于文本或二进制文件.
目前我有一种方法可行,但运行时间太长.
有没有人解决过这个问题?
编写文本文件比通过StreamWriter快得多吗?
建议?
编辑:我喜欢马尔可夫链的想法,以产生更自然的文本.但仍需要面对速度问题.
Sam*_*ron 14
对于文本,您可以使用堆栈溢出社区转储,那里有300megs的数据.使用我编写的应用程序加载到数据库只需要大约6分钟,并且可能大约同时将所有帖子转储到文本文件中,这样可以轻松地为您提供200,000到100万个文本文件,具体取决于您的方法(还有将源和xml混合在一起的额外好处).
您也可以使用类似维基百科转储的东西,它似乎以MySQL格式发布,这将使它非常容易使用.
如果您正在寻找可以拆分的大文件,出于二进制目的,您可以使用VM vmdk或本地翻录的DVD.
编辑
Mark提到了gutenberg下载的项目,这也是一个非常好的文本(和音频)源,可以通过bittorrent下载.
我认为您可能正在寻找类似马尔可夫链过程的东西来生成这些数据。它既是随机的(随机的),又是结构化的,因为它基于有限状态机运行。
事实上,马尔可夫链已被用于生成人类语言的半真实文本。一般来说,它们并不是需要正确分析的微不足道的东西,但它们表现出某些属性的事实对您来说应该足够好了。(再次,请参阅本页的马尔可夫链属性部分。)希望您应该了解如何设计一个,但是 - 要实现,它实际上是一个非常简单的概念。您最好的选择可能是为通用马尔可夫过程创建一个框架,然后分析自然语言或源代码(无论您希望随机数据模拟哪个),以便“训练”您的马尔可夫过程。最后,这应该会根据您的要求提供非常高质量的数据。如果您需要这些大量的测试数据,那么值得付出努力。
| 归档时间: |
|
| 查看次数: |
8152 次 |
| 最近记录: |