public void Generate(
            string path,
            long size,
            int bufferSize,
            int percentOfAppearance
            )
        {
            Analyze(path, size);

            _bytesWritten = 0;

            if (bufferSize > size)
            {
                bufferSize = (int)size;
            }

            var workers = (int)(size / bufferSize);

            if (workers > 10)
            {
                workers = 10;
            }

            try
            {
                _fileAdapter.Delete(path);
                _fileWriter.BeginWrite(path, bufferSize);

                Parallel.For(0, workers, w => GenerateLines(w, bufferSize, size, percentOfAppearance));

                _fileWriter.SetLength(size);
            }
            finally
            {
                _fileWriter.EndWrite();
            }
        }