问题列表 - 第4761页

处理基于线路的网络I/O流的好方法是什么?

注意:让我为这个问题的长度道歉,我不得不把很多信息都写进去.我希望这不会导致太多人简单地浏览它并做出假设.请完整阅读.谢谢.

我有一个通过套接字进入的数据流.这些数据是面向行的.

我正在使用.NET的APM(异步编程方法)(BeginRead等).这排除了使用基于流的I/O,因为异步I/O是基于缓冲区的.可以重新打包数据并将其发送到流,例如内存流,但也存在问题.

问题是我的输入流(我无法控制)没有给我任何关于流有多长的信息.它只是一个看起来像这样的换行符流:

COMMAND\n
...Unpredictable number of lines of data...\n
END COMMAND\n
....repeat....
Run Code Online (Sandbox Code Playgroud)

因此,使用APM,并且由于我不知道任何给定数据集将持续多长时间,因此很可能数据块将跨越需要多次读取的缓冲区边界,但这些多次读取也将跨越多个数据块.

例:

Byte buffer[1024] = ".................blah\nThis is another l"
[another read]
                    "ine\n.............................More Lines..."
Run Code Online (Sandbox Code Playgroud)

我的第一个想法是使用StringBuilder并简单地将缓冲线附加到SB.这在某种程度上起作用,但我发现很难提取数据块.我尝试使用StringReader来读取新的数据但是无法知道你是否得到一个完整的行,因为StringReader在最后一个块的末尾返回一个部分行,然后返回null.没有办法知道返回的内容是否是完整的新行数据.

例:

// Note: no newline at the end
StringBuilder sb = new StringBuilder("This is a line\nThis is incomp..");
StringReader sr = new StringReader(sb);
string s = sr.ReadLine(); // returns "This is a line"
s = sr.ReadLine();        // returns "This is incomp.."
Run Code Online (Sandbox Code Playgroud)

更糟糕的是,如果我继续追加数据,缓冲区会变得越来越大,因为这可能会持续数周或数月,而这不是一个好的解决方案.

我的下一个想法是在读取它时从SB中删除数据块.这需要编写我自己的ReadLine函数,但后来我在读写期间卡住了数据.此外,较大的数据块(可能包含数百个读取和数兆字节的数据)需要扫描整个缓冲区以查找换行符.它不高效且非常丑陋.

我正在寻找具有StreamReader/Writer简单性和易于异步I/O的东西.

我的下一个想法是使用MemoryStream,并将数据块写入内存流,然后将StreamReader附加到流并使用ReadLine,但我再次知道缓冲区中的最后一次读取是完整的行还是不,再加上从流中删除"陈旧"数据就更难了.

我还考虑过使用带有同步读取的线程.这样做的好处是,使用StreamReader时,除了断开的连接情况外,它总是从ReadLine()返回一个完整的行.然而,这在取消连接时存在问题,并且某些类型的网络问题可能导致长时间挂起的阻塞套接字.我正在使用异步IO,因为我不想在程序阻塞数据接收的生命周期中占用一个线程.

这种联系持久.数据将随着时间的推移而持续流动.在初始连接期间,存在大量数据,并且一旦完成该流程,套接字保持打开以等待实时更新.我不确切地知道初始流程何时"完成",因为唯一的方法是不再发送更多数据.这意味着我不能等待在处理之前完成初始数据加载,我几乎在实时处理"实时"处理.

那么,任何人都可以提出一个很好的方法来处理这种情况,而不是过于复杂吗?我真的希望它尽可能简单和优雅,但由于所有边缘情况,我不断提出越来越复杂的解决方案.我想我想要的是某种FIFO,在其中我可以轻松地追加更多数据,同时从中弹出符合特定条件的数据(即换行终止字符串).

.net c# asynchronous network-programming

6
推荐指数
1
解决办法
1013
查看次数

我如何故意从主内存和缓存中读取?

所以我正在学习汇编,我们有一个任务是找到从内存读取和从缓存中读取之间的时间差.我们必须通过创建2个循环并对它们进行计时来实现.(一个从主存储器读取,另一个从缓存读取).问题是,我不知道,也找不到任何告诉我如何从缓存或主存储器读取= /.你们能帮助我吗?我在MASM32中这样做.我理解如何制作循环和大多数汇编语言,但我只是不能让它读取= /


编辑:

我有一个问题,我已经这样做了......

mov ecx, 100 ;loop 100 times
xor eax, eax ;set eax to 0
_label:
mov eax, eax ;according to me this is read memory is that good?
dec ecx ;dec loop
jnz _label ;if still not equal to 0 goes again to _label
Run Code Online (Sandbox Code Playgroud)

......那会没事吗?


编辑2:

那么,我不打算撬开,我感谢你的帮助,我只是有另一个问题,因为这是我必须做的两个循环.我需要以某种方式比较它们,我一直在寻找一个定时器指令,但我没有发现任何我只发现:timeGetTime,GetTickCountPerformance Counter但据我所知,这些指令返回系统时间而不是时间完成循环需要它.有没有办法真正做我想要的?或者我需要考虑另一种方式?

另外,如果我给出各种"mov"指令,那么从第二个循环中的不同寄存器(不从高速缓存读取的那个)读取是否可以呢?还是我完全不在这里?

对不起所有这些问题,但再次感谢您的帮助.

performance assembly caching masm

5
推荐指数
1
解决办法
2042
查看次数

使用#defines自动替换变量

我有一个大约100个#defines的文件,从1-100开始,每个文件都有一个唯一的字符串值.

现在我正在尝试打印这个值,但是我想要打印#define是什么,而不是值.例如:

#define FIRST_VALUE 1
var = FIRST_VALUE;
printf("%s", var);
Run Code Online (Sandbox Code Playgroud)

我希望printf打印FIRST_VALUE,而不是1.

有没有办法在C中这样做?或者我必须在switch语句中写出100多个case块?

c string replace c-preprocessor

3
推荐指数
1
解决办法
388
查看次数

LINUX:是否可以编写一个不依赖于libc库的工作程序?

我想知道我是否可以用C可执行的编程语言编写程序,虽然不使用单个库调用,例如甚至不是exit()?

如果是这样,显然它根本不依赖于库(libc,ld-linux).

c linux binary executable dependencies

7
推荐指数
2
解决办法
1056
查看次数

格式化NSNumber对象时如何指定小数位?

我正在使用下面的Objective-C代码来格式化NSNumber,并且它在大多数情况下都能正常工作,但是当NSNumber对象保存整数(没有小数部分)时,它并不能完全符合我的要求.

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(80.0f, 90.0f, 225.0f, 40.0f)];
label.backgroundColor = [UIColor clearColor];
label.textColor = [UIColor whiteColor];
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setFormat:@"###.##"];
int bytes = 1024 * 1024;
NSNumber *total = [NSNumber numberWithFloat:([self.totalFileSize floatValue] / bytes)];
label.text = [NSString stringWithFormat:@"0.00 MB of %@ MB", [formatter stringFromNumber:total]];
Run Code Online (Sandbox Code Playgroud)

因此,例如,如果self.totalFileSize持有55.2300,它将显示"55.23",因为它应该在我的身上UILabel.但如果同一个变量保持55,它只会在标签上显示"55".

我真正想要的是这个代码总是包含输出中的2个小数位.

我怎样才能做到这一点?

iphone cocoa cocoa-touch

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

Python相当于$ this - > $ varName

在PHP中,我可以执行以下操作:

$myVar = 'name';

print $myClass->$myVar;
// Identical to $myClass->name
Run Code Online (Sandbox Code Playgroud)

我希望在Python中这样做,但无法找到方法

php python

3
推荐指数
2
解决办法
833
查看次数

用于.NET Web Apps的32位构建服务器和64位生产服务器

我们的工作站运行64位Vista,ASP.NET MVC Web应用程序的生产服务器是64位Server 2008服务器.但是,运行TeamCity的构建服务器是Server 2008 32位服务器.我们将采用这些构建并将它们部署在64位生产服务器上.应用程序全部用C#编写.我是否应该关注在32位环境中进行构建?是否有必要升级我们的构建服务器?

.net asp.net asp.net-mvc 64-bit build-process

3
推荐指数
1
解决办法
1571
查看次数

为什么我的Flash动画覆盖了我的div位置?

我正在使用FancyBox生成弹出图像.

FancyBox(万一你很好奇.)

它会弹出一个divz-index: 92;.

我有一个Flash动画运行远远低于这个z-index.

我的问题是,在两个不同的Firefox浏览器(相同版本)中,我有不同的结果.

在一个,一切似乎都好.另一方面,Flash动画出现在前面div.我尝试刷新并重新启动浏览器,但总是会出现同样的问题.

我知道其中一个屏幕截图来自IE,但它只是作为参考.

我能做错什么?

http://www.my-clock.net/tmp/sreen01.jpg

alt text http://www.my-clock.net/tmp/sreen02.jpg

html css flash fancybox

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

如何使用VBA反转所选Excel列的顺序

我是VBA的新手,我正试图弄清楚如何在没有硬编码的情况下颠倒所选列范围的顺序.我查看的每个示例要么硬编码列以反转顺序,要么假设您要反转工作表中的所有列.我不是想让别人为我写这个,但这很简单,只要有人解释我错过了什么,我就应该没问题.

有人有建议吗?

excel vba excel-vba

7
推荐指数
2
解决办法
5万
查看次数

需要在Program File文件夹中写入的自更新.NET客户端应用程序

类似于: 如果路径受到保护,请求Windows Vista UAC提升?

我在c:\ Program Files(Windows Vista)中安装了.NET客户端应用程序.此应用程序应自行更新,但不会因为权限问题而更新.自动更新程序应该只是替换几个程序集,但它们都位于c:\ Program File下,应用程序抛出以下异常:

System.UnauthorizedAccessException:拒绝访问路径"C:\ Program Files ...".

我无法控制应用程序的安装位置和权限.这有什么解决方法吗?是否可以在几秒钟内请求管理员权限?是否可以弹出UAC窗口?我很确定有一个解决方法......否则,Firefox将如何更新自己?

在此先感谢您的帮助和想法!

c# uac file-permissions .net-3.5

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