public void WriteBatch() { var writeOptions = LevelDBInterop.leveldb_writeoptions_create(); this.InnerPut(writeOptions, "key1", "value1"); var writeBatch = LevelDBInterop.leveldb_writebatch_create(); this.InnerBatchDelete(writeBatch, "key1"); this.InnerBatchPut(writeBatch, "key2", "value2"); IntPtr error; LevelDBInterop.leveldb_write(Database, writeOptions, writeBatch, out error); LevelDBException.Check(error); var readOptions = LevelDBInterop.leveldb_readoptions_create(); var value1 = this.InnerGet(readOptions, "key1"); Assert.Null(value1); var value2 = this.InnerGet(readOptions, "key2"); Assert.Equal("value2", value2); this.InnerBatchDelete(writeBatch, "key2"); LevelDBInterop.leveldb_writebatch_clear(writeBatch); LevelDBInterop.leveldb_write(Database, writeOptions, writeBatch, out error); LevelDBException.Check(error); value2 = this.InnerGet(readOptions, "key2"); Assert.Equal("value2", value2); LevelDBInterop.leveldb_writebatch_destroy(writeBatch); LevelDBInterop.leveldb_writeoptions_destroy(writeOptions); LevelDBInterop.leveldb_writeoptions_destroy(readOptions); }
/// <summary> /// 写入批量的操作。 /// </summary> /// <param name="batch">批量的操作。</param> /// <param name="sync">指示是否同步操作。</param> public void Write(WriteBatch batch, bool sync = false) { this.ThrowWhenDisposed(); var options = new WriteOptions(sync); IntPtr error; LevelDBInterop.leveldb_write(this._handle, options._handle, batch._handle, out error); LevelDBException.Check(error); GC.KeepAlive(batch); GC.KeepAlive(options); GC.KeepAlive(this); }