Tag: buffer

NetworkStream和TcpClient有多少缓冲区?

我们正在编写TCPServer和Client程序。 TcpClient缓冲区有多少空间? 比如,它会在什么时候开始丢弃数据? 我们正在尝试确定TcpClient是否可以阻塞,或者它是否应该进入它自己的后台线程(以便缓冲区无法填满)。

SerialPort写缓冲区的目的是什么?

从SerialPort对象外部来看,写缓冲区的大小以及它是否已满是没有区别的。 使用同步写入,write方法将阻塞,直到所有数据都已发送且缓冲区为空。 使用异步写入,数据排队,程序继续运行。 在写操作完成且数据超出缓冲区之前,不会调用回调方法。 无论缓冲区中有多少数据以及缓冲区是否已满,serialport对象的行为似乎都是相同的。 写缓冲区已满时,似乎没有错误发生。 那么,为什么能够检查BytesToWrite和WriteBufferSize呢? 当写缓冲区已满时,SerialPort是否有任何不同的行为方式?

强制刷新到Observable.Buffer c#

有没有办法强制Observable.Buffer在缓冲时间结束前刷新? 在示例中: mSubscription = mFluxObservable.Buffer(new TimeSpan(0, 0, 1, 30)).Subscribe(o => saver(o, iSessionId)); 我希望在1:30时段结束前刷新数据!

使用LINQ在字节数组中搜索以某个字节开始/停止的所有子数组

我正在处理COM端口应用程序,我们有一个定义的可变长度数据包结构,我正在与微控制器通信。 数据包具有开始和停止字节的分隔符。 麻烦的是,有时读缓冲区可能包含无关的字符。 看起来我总是得到整个数据包,只是在实际数据之前/之后的一些额外的喋喋不休。 所以我有一个缓冲区,只要从COM端口收到新数据,我就会附加数据。 搜索此缓冲区以查找可能出现的数据包的最佳方法是什么? 例如: 假设我的数据包分隔符是0xFF ,我有一个数组 { 0x00, 0xFF, 0x02, 0xDA, 0xFF, 0x55, 0xFF, 0x04 } 如何创建一个函数/ LINQ-statment来返回以分隔符开头和结尾的所有子数组(几乎就像带有通配符的滑动相关器)? 该示例将返回以下3个数组: {0xFF, 0x02, 0xDA, 0xFF}, {0xFF, 0x55, 0xFF}, and {0xFF, 0x02, 0xDA, 0xFF, 0x55, 0xFF}

从托管C#释放非托管内存及其指针

简而言之的问题是:如何释放从本机DLL返回的内存作为托管代码中的ItrPtr? 详细信息:假设我们有简单的函数将两个参数作为OUTPUT,第一个是参考指针到字节数组,第二个是参考Int。 该函数将根据某些规则分配字节数,并返回内存指针和字节大小以及返回值(1表示成功,0表示失败)。 下面的代码工作正常,我可以正确获取字节数组和字节数和返回值,但是当我尝试使用指针(IntPtr)释放内存时,我得到exception: Windows已在TestCppDllCall.exe中触发了断点。 这可能是由于堆的损坏,这表示TestCppDllCall.exe或它已加载的任何DLL中的错误。 这也可能是由于用户在TestCppDllCall.exe具有焦点时按下F12。 输出窗口可能包含更多诊断信息。 为了清楚起见: 下一个C#代码与其他DLL函数正常工作具有相同的签名并释放内存工作没有任何问题。 如果您需要更改分配内存方法或添加任何其他代码,则接受(C)代码中的任何修改。 我需要的所有function是Native DLL函数接受两个参数引用(Byte数组和int,在c#[IntPtr of byte array and int]中)根据一些规则填充一些值并返回函数结果(Success或Fail) 。 CppDll.h #ifdef CPPDLL_EXPORTS #define CPPDLL_API __declspec(dllexport) #else #define CPPDLL_API __declspec(dllimport) #endif extern “C” CPPDLL_API int writeToBuffer(unsigned char *&myBuffer, int& mySize); CppDll.cpp #include “stdafx.h” #include “CppDll.h” extern “C” CPPDLL_API int writeToBuffer(unsigned char*& myBuffer, int& mySize) { mySize […]

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

我正在使用反应式扩展将数据整理到100ms的缓冲区中: 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); 这很好用。 但是,我想要的行为与Buffer操作提供的行为略有不同。 基本上,如果收到另一个数据项,我想重置计时器。 只有当整个100毫秒没有收到数据时我才能处理它。 这开启了永不处理数据的可能性,因此我还应该能够指定最大计数。 我会想象一下: .SlidingBuffer(TimeSpan.FromMilliseconds(100), 10000) 我已经环顾四周,在Rx中找不到这样的东西? 任何人都可以确认/否认这个吗?