Пример #1
0
        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);
        }
Пример #2
0
        /// <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);
        }