using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using MongoDB.Bson; using MongoDB.Driver; using MongoDB.Driver.GridFS; using System.IO; namespace TestCSharp326 { public static class Program { public static void Main(string[] args) { try { var server = MongoServer.Create("mongodb://localhost/?safe=true"); var database = server["csharp326"]; var grid = database.GridFS; var fileCount = 10000; var fileSize = 50; // create the files in parallel Console.WriteLine("Uploading the files"); var parallelOptions = new ParallelOptions { MaxDegreeOfParallelism = 20 }; Parallel.ForEach(Enumerable.Range(0, fileCount), parallelOptions, n => { var filename = string.Format("/tmp/parallel/file{0}", n); var fileInfo = TouchFile(grid, filename); using (var stream = fileInfo.OpenWrite()) { var bytes = Enumerable.Range(0, fileSize).Select(b => (byte) b).ToArray(); stream.Write(bytes, 0, bytes.Length); } //Console.WriteLine("Uploaded {0}", filename); }); Console.WriteLine(); // test the files in parallel Console.WriteLine("Downloading the files"); Parallel.ForEach(Enumerable.Range(0, fileCount), parallelOptions, n => { var filename = string.Format("/tmp/parallel/file{0}", n); var fileInfo = new MongoGridFSFileInfo(database.GridFS, filename); using (var stream = fileInfo.OpenRead()) { var bytes = new byte[stream.Length]; var read = stream.Read(bytes, 0, bytes.Length); if (read != bytes.Length) { Console.WriteLine("{0} read={1}", filename, read); } var expected = Enumerable.Range(0, fileSize).Select(b => (byte) b).ToArray(); if (!expected.SequenceEqual(bytes)) { Console.WriteLine("{0} contents don't match", filename); } } //Console.WriteLine("Downloaded {0}", filename); }); Console.WriteLine(); Console.WriteLine("Dropping database csharp326"); database.Drop(); } catch (Exception ex) { Console.WriteLine("Unhandled exception:"); Console.WriteLine(ex); } Console.WriteLine("Press Enter to continue"); Console.ReadLine(); } private static MongoGridFSFileInfo TouchFile(MongoGridFS grid, string path) { var dir = Path.GetDirectoryName(path); // Uploads an empty file into the system marked as // a 'directory' var info = grid.Upload( new System.IO.MemoryStream(new byte[0]), path, new MongoGridFSCreateOptions() { Metadata = new BsonDocument() { { "dirpath", BsonValue.Create(dir) } } }); return info; } } }