标签: buffer

反应式扩展是否支持滚动缓冲?

我正在使用反应式扩展将数据整理到100毫秒的缓冲区:

this.subscription = this.dataService
    .Where(x => !string.Equals("FOO", x.Key.Source))
    .Buffer(TimeSpan.FromMilliseconds(100))
    .ObserveOn(this.dispatcherService)
    .Where(x => x.Count != 0)
    .Subscribe(this.OnBufferReceived);
Run Code Online (Sandbox Code Playgroud)

这很好用.但是,我想要的行为与Buffer操作提供的行为略有不同.基本上,如果收到另一个数据项,我想重置计时器.只有当整个100毫秒没有收到数据时我才能处理它.这开启了永不处理数据的可能性,因此我还应该能够指定最大计数.我会想象一下:

.SlidingBuffer(TimeSpan.FromMilliseconds(100), 10000)
Run Code Online (Sandbox Code Playgroud)

我已经环顾四周,在Rx中找不到这样的东西?任何人都可以确认/否认这个吗?

.net c# buffer sliding-window system.reactive

23
推荐指数
2
解决办法
4132
查看次数

如何从SQL缓冲区向Emacs中的sql-mysql缓冲区发送大于4k的查询?

我经常在Emacs的sql-mysql模式中遇到烦恼,我想知道是否有人有解决方案或更好的解决方法.无论何时我尝试将查询从sql-mode缓冲区发送到活动的SQL进程缓冲区,该查询都不能大于4k.如果它大于4k,则会出现某种中断 - 可能是换行符 - 这会导致mysql解释器在下一行引发错误.

sql-mysql由...实现sql.el,并使用该函数sql-send-region将查询区域(或整个缓冲区)发送到选定的SQL进程缓冲区.sql-send-region电话comint-send-region,然后拨打电话process-send-region.process-send-region是调用一个C函数send_process,无论是在src/process.c在Emacs的源.

看起来这可能只是IPC管道上4k缓冲区产生的限制.由于看起来内核黑客攻击是改变这个大小所必需的,所以这不是一个好的答案.

我想我很困惑的是,如果mysql客户端大于4k,那么通过管道发送的SQL没有被mysql客户端正确地重新组装.有任何想法吗?

Emacs版本:2012-03-25关于allspice的GNU Emacs 23.3.1(x86_64-pc-linux-gnu,GTK +版本2.24.10),由Debian修改

mysql -V:mysql Ver 14.14 Distrib 5.5.24,debian-linux-gnu(x86_64)使用readline 6.2

Sql Mysql选项:-A -C -n(注意我已尝试使用和不使用-n(无缓冲)并且都没有修复此问题)

mysql linux emacs buffer ipc

23
推荐指数
1
解决办法
740
查看次数

为什么通过检索指向其数据的指针修改字符串是不允许的?

在C++ 11中,a的字符std::string必须连续存储,如第21.4.1/5节所述:

basic_string对象中的char类对象应连续存储.也就是说,对于任何basic_string对象,标识&*(s.begin()+ n)==&*s.begin()+ n应该适用于n的所有值,使得0 <= n <s.size ().

但是,这里是§21.4.7.1如何列出两个函数来检索指向底层存储的指针(强调我的):

const charT*c_str()const noexcept;
const charT*data()const noexcept;
1返回:指针p,使得p + i ==&operator [](i)为[0,size()]中的每个i.
2复杂性:恒定时间.
3要求:程序不得更改存储在字符数组中的任何值.

我可以想到的第3点的一种可能性是指针可以通过对象的以下用途而变得无效(第21.4.1/6节):

  • 作为任何标准库函数的参数,将非const basic_string作为参数引用.
  • 调用非const成员函数,除了operator [],at,front,back,begin,rbegin,end和rend.

即便如此,迭代器也会失效,但我们仍然可以修改它们,无论它们是什么.我们仍然可以使用指针,直到它变为无效以便从缓冲区读取.

为什么我们不能直接写入这个缓冲区?是因为它会使类处于不一致状态,例如,end()不会使用新结束更新?如果是这样,为什么允许直接写入类似的缓冲区std::vector

用例包括能够将a的缓冲区传递std::string给C接口以检索字符串而不是传入一个字符串,vector<char>并使用迭代器初始化字符串:

std::string text;
text.resize(GetTextLength());
GetText(text.data());
Run Code Online (Sandbox Code Playgroud)

c++ string buffer language-lawyer c++11

23
推荐指数
1
解决办法
2930
查看次数

decodeAudioData HTML5音频API

我想从ArrayBuffer播放音频数据...所以我生成我的数组并用微缩输入填充它.如果我在画布上绘制这些数据,它看起来像 - > 在此输入图像描述

这样可行!

但是,如果我想听这个数据

context.decodeAudioData(tmp, function(bufferN) { //tmp is a arrayBuffer
    var out = context.createBufferSource();
    out.buffer = bufferN;
    out.connect(context.destination);
    out.noteOn(0);
}, errorFunction);
Run Code Online (Sandbox Code Playgroud)

我听不到任何声音......因为调用了errorFunction.但错误是空的!

我也试着像这样得到缓冲区:

var soundBuffer = context.createBuffer(myArrayBuffer, true/*make mono*/);
Run Code Online (Sandbox Code Playgroud)

但我得到错误:Uncaught SyntaxError:指定了无效或非法字符串.

谁能给我一个暗示?

编辑1(更多代码以及我如何获得麦克风输入):

 navigator.webkitGetUserMedia({audio: true}, function(stream) {

                liveSource = context.createMediaStreamSource(stream);

                // create a ScriptProcessorNode
                if(!context.createScriptProcessor){
                   node = context.createJavaScriptNode(2048, 1, 1);
                } else {
                   node = context.createScriptProcessor(2048, 1, 1);
                }


                node.onaudioprocess = function(e){

               var tmp = new Uint8Array(e.inputBuffer.byteLength);
               tmp.set(new      Uint8Array(e.inputBuffer.byteLength), 0);

   //Here comes the code from above.
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

javascript html5 buffer decode html5-audio

23
推荐指数
1
解决办法
7964
查看次数

何时使用Array,Buffer或direct Buffer

在编写用于OpenGL库的Matrix类时,我遇到了是否使用Java数组或缓冲区策略来存储数据的问题(JOGL为Matrix操作提供了直接缓冲区复制).为了分析这一点,我编写了一个小型性能测试程序,它比较了Arrays与Buffers vs direct Buffers的循环和批量操作的相对速度.

我想在这里与你分享我的成果(因为我觉得它们很有趣).请随时评论和/或指出任何错误.
可以在pastebin.com/is7UaiMV上查看代码.

笔记

  • 循环读取数组实现为A [i] = B [i],否则JIT优化器将完全删除该代码.实际var = A [i]似乎几乎相同.

  • 在数组大小为10,000的示例结果中,JIT优化器很可能已使用类似System.arraycopy的实现替换了循环数组访问.

  • 没有批量获取缓冲区 - >缓冲区,因为Java将A.get(B)实现B.put(A),因此结果与批量放置结果相同.

结论

在几乎所有情况下,强烈建议使用Java内部数组.不仅提高/获取速度大大加快,JIT还能够对最终代码执行更好的优化.

只有在以下两种情况适用时才应使用缓冲区:

  • 您需要处理大量数据.
  • 该数据大部分或总是经过批量处理.

请注意,后备缓冲区具有Java数组,用于补偿缓冲区的内容.建议在此后​​台缓冲区上执行操作,而不是循环put/get.

只有在担心内存使用情况且永远不会访问基础数据时,应使用直接缓冲区.它们比非直接缓冲区稍慢,如果访问基础数据则要慢得多,但使用的内存较少.此外,在使用直接缓冲区时,将非字节数据(如float-arrays)转换为字节时会产生额外的开销.

有关详细信息,请参阅此处

样本结果

注意:百分比仅为便于阅读而没有实际意义.

使用大小为16且10,000,000次迭代的数组...

-- Array tests: -----------------------------------------

Loop-write array:           87.29 ms  11,52%
Arrays.fill:                64.51 ms   8,51%
Loop-read array:            42.11 ms   5,56%
System.arraycopy:           47.25 ms   6,23%

-- …
Run Code Online (Sandbox Code Playgroud)

java arrays performance buffer

22
推荐指数
2
解决办法
1万
查看次数

使ipython笔记本实时打印

Ipython Notebook似乎没有实时打印结果,但似乎以某种方式缓冲,然后批量输出打印件.如何处理打印命令后,如何让ipython打印我的结果?

示例代码:

import time


def printer():
    for i in range(100):
        time.sleep(5)
        print i
Run Code Online (Sandbox Code Playgroud)

假设上面的代码在导入的文件中.我怎么能说,当我打电话给打印机功能时,它每隔5秒打印一个数字而不是最后的所有数字?

请注意,我无法编辑该功能,printer()因为我是从某个外部模块获取的.我希望以某种方式更改ipython笔记本的配置,以便它不使用缓冲区.因此,我也不希望使用sys.stdout.flush(),我想根据问题实时做,我不希望任何缓冲区开始.

我也尝试使用以下命令加载ipython notebook:

ipython notebook --cache-size=0
Run Code Online (Sandbox Code Playgroud)

但这似乎也不起作用.

python buffer ipython-notebook

22
推荐指数
2
解决办法
8326
查看次数

如何知道nodejs中字节缓冲区内容的实际大小?

我将文件作为字节缓冲区,不能使用fs.stat()方法.所以我尝试使用buf.length,但是这个长度是指为缓冲区对象分配的内存量,而不是实际的内容大小.例如,我的文件大小为22,449字节.buf.length返回39804.

buffer node.js

22
推荐指数
1
解决办法
2万
查看次数

将数据从fstream复制到stringstream而没有缓冲区?

无论如何我可以将数据从fstream(一个文件)传输到stringstream(内存中的流)吗?

目前,我正在使用缓冲区,但这需要双倍的内存,因为您需要将数据复制到缓冲区,然后将缓冲区复制到字符串流,直到您删除缓冲区,数据在内存中重复.

std::fstream fWrite(fName,std::ios::binary | std::ios::in | std::ios::out);  
    fWrite.seekg(0,std::ios::end); //Seek to the end  
    int fLen = fWrite.tellg(); //Get length of file  
    fWrite.seekg(0,std::ios::beg); //Seek back to beginning  
    char* fileBuffer = new char[fLen];  
    fWrite.read(fileBuffer,fLen);  
    Write(fileBuffer,fLen); //This writes the buffer to the stringstream  
    delete fileBuffer;`
Run Code Online (Sandbox Code Playgroud)

有没有人知道如何在不使用inbetween缓冲区的情况下将整个文件写入字符串流?

c++ buffer fstream stl stringstream

21
推荐指数
3
解决办法
4万
查看次数

如何在WebGL中为对象设置动画(修改特定顶点不是完全变换)

好的,

我是3D图形的新手,我想在模型中为各个特定顶点设置动画(不是整个模型变换).我的脚本主要基于NEHE webgl教程.在本教程中,所有对象顶点都存储在缓冲区中,该缓冲区在首次运行程序时初始化一次.这是初始化代码:*注意顶点包含顶点数组

vertexBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
vertexBuffer.itemSize = 3;
vertexBuffer.numItems = parseInt(vertices.length/vertexBuffer.itemSize);
Run Code Online (Sandbox Code Playgroud)

现在因为它们在开始时被初始化,显然改变顶点数组将不起作用.所以我想知道如何实时修改顶点的最佳方法,同时仍保持其足够高效以便顺利运行.

是否有可能以某种方式重新绑定缓冲区,例如在每个动画时刻再次运行此代码?

gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
Run Code Online (Sandbox Code Playgroud)

干杯,J

javascript animation buffer webgl vertex

21
推荐指数
1
解决办法
7304
查看次数

另一个:强制Chrome完全缓冲mp4视频

我已经看到了一些关于这个的线索,但是没有答案,所以我想我会在污染的youtube相关页面中添加另一个.

我有一个100MB的mp4视频需要浏览器完全下载,

然而,当它被完全下载时没有发生任何事件,并且Chrome似乎停止缓冲视频,直到当前视频时间几乎达到缓冲区的末尾,然后它会请求更多.

如何让浏览器完全下载视频并将其缓冲100%?

谢谢

video html5 mp4 buffer google-chrome

21
推荐指数
1
解决办法
4万
查看次数