首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >一个大的字节缓冲区还是几个小的?

一个大的字节缓冲区还是几个小的?
EN

Stack Overflow用户
提问于 2009-02-24 06:30:09
回答 5查看 2.5K关注 0票数 2

我正在学习C#异步套接字编程,并且我了解到重用某种池中的字节缓冲区是一个好主意,然后在从套接字接收数据时根据需要检出一个字节缓冲区。

但是,我看到了两种不同的字节数组池方法:一种使用简单的队列系统,只需根据需要在队列中添加/删除它们。如果请求了一个字节数组,并且队列中没有更多的字节数组,则会创建一个新的字节数组。

我见过的另一种方法使用了一个大的字节数组来存储整个程序。队列的概念仍然适用,但它是一个整数队列,用于确定要使用的字节数组的片(偏移量)。如果请求了一个数组,并且队列中没有剩余的数组,则必须调整数组的大小。

对于高度可扩展的服务器,以下哪种解决方案更好?我的直觉是,只使用多字节数组会更便宜,因为我认为根据需要调整数组的大小(即使我们将其分配为大块)将是非常昂贵的,特别是当它变大的时候。使用多个数组似乎也更直观--使用一个我没有考虑到的大型数组有什么好处吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-02-24 06:43:05

你的直觉是正确的。每次需要使数组更大时,都需要重新创建数组并复制现有的字节。由于我们在这里讨论的是字节,因此数组的大小可能很快就会变大。因此,您将每次请求一块连续的内存,这取决于您的程序使用内存的方式,这可能是可行的,也可能是不可行的。可以说,这实际上也将成为一个虚拟池。根据定义,池具有一组由不同客户端管理和共享的多个项目。

单数组解决方案的实现也要复杂得多。好消息是,一个数组解决方案允许您分配可变大小的块,但这是以本质上重新实现malloc为代价的:处理碎片等,这是您不应该涉及的。

多阵列解决方案允许您使用N个缓冲区初始化池,并以简单的方式轻松管理它们。这绝对是我推荐的方法。

票数 5
EN

Stack Overflow用户

发布于 2009-02-24 06:44:11

我不建议调整大小的选项。从简单开始,一路向上。一个字节缓冲区队列,当字节缓冲区耗尽时,将一个新的字节缓冲区添加到队列的末尾,这将是一个好的开始。您可能必须注意线程问题,所以我的建议是使用其他人的线程安全队列实现。

接下来,你可以看看更复杂的“指针”到一个大的字节数组块中,除了我的建议是有一个4k/16k (页面大小的两倍的幂)块的队列,索引到其中,当它满时,你添加另一个大的块到队列中。实际上,我根本不推荐这样做,因为它很复杂,而且在性能上的收益也有问题。

从简单开始,一路向上。缓冲池,使其线程安全,看看你是否需要更多。

票数 2
EN

Stack Overflow用户

发布于 2009-02-24 06:50:01

再次投票支持多个缓冲区,但由于您是异步处理,因此需要确保您的队列是线程安全的。默认的Queue<T>集合绝对不是threadsafe。

因此,用户和MS员工JaredPar在这里有一个很好的线程安全队列实现:

http://blogs.msdn.com/jaredpar/archive/2009/02/16/a-more-usable-thread-safe-collection.aspx

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/581936

复制
相关文章
新标签页打开
人民不仅有权爱国,而且爱国是个义务,是一种光荣。——徐特立 <a href="https://vampireachao.gitee.io/" target="_self">默认当前页面打开</a> <a href="https://vampireachao.gitee.io/" target="_blank">新页面打开</a> <a href="" target="ruben">在frame中打开</a> <iframe src="" name="ruben"></iframe> <a href=
阿超
2022/08/16
1.7K0
iOS广告启动页
产品需求:启动页逻辑: 上部分为广告区域,可在运营后台配置图片+跳转页(同No.2);首次开 APP,则请求一次配置,失败或无配置则不显示,一旦有网了即刻请求一次并 做好缓存; 客户端每4小时请求一次;每两小时显示一次广告页内容 用户点击则跳转已配置页面;启动页上有5s倒计时,时间到了启动页关闭,也 可手动点击跳过启动页,广告已过期也不显示。 服务端返回模型: { “image” : “http://www.baidu.com“, “link” : “跳转链接”, “start” : “2017-0
czjwarrior
2018/05/28
8250
云本机应用程序成熟度的模型
云本地应用程序是为了能在云基础架构上最佳地运行而构建的。云本地应用程序体系结构与为数据中心设计的传统分层应用程序非常不同。在本文中,我将讨论来自开放数据中心联盟(ODCA)的成熟度模型,用于评估应用程序的云本地性。
lemon2ml
2018/01/15
1.7K0
云本机应用程序成熟度的模型
如何打开sln文件并显示窗口_在本机打开别人的sln文件[通俗易懂]
sln:在开发环境中使用的解决方案文件。它将一个或多个项目的所有元素组织到单个的解决方案中。此文件存储在父项目目录中.解决方案文件,他是一个或多个.proj(项目)的集合
全栈程序员站长
2022/07/01
3K0
linkedin官网_linkedin manager
关系型数据库仍然作为主要的primary data store的方案 Relational Databases have been around for a long time and have become a trusted storage medium for all of a company’s data. 传统的数据仓库的ETL和OLAP方案 Data is pulled off this primary data store, transformed, and then stored in a secondary data store, such as a data warehouse. The industry typically uses ETL to run nightly jobs to give executives a view of the previous day’s, week’s, month’s, year’s business performance.
全栈程序员站长
2022/11/07
12.1K0
linkedin官网_linkedin manager
从0开始构建一个Oauth2Server服务 <6> 移动和本机应用程序
与单页应用程序一样,移动应用程序也无法维护客户机密。因此,移动应用程序还必须使用不需要客户端密码的 OAuth 流程。当前的最佳做法是将授权流程与 PKCE 一起使用,同时启动外部浏览器,以确保本机应用程序无法修改浏览器窗口或检查内容。
用户1418987
2023/10/16
2080
从0开始构建一个Oauth2Server服务 <6> 移动和本机应用程序
应用程序InetlliJ IDEA不能打开
一大早回公司想打开 IDEA,准备魔改一下 Spark,突然发现前两天更新的 IDEA 打不开了(那天更新完后没有尝试打开),WTF。打不开的表现是双击图标毫无反应,我第一反应是,我系统有多个 IDEA,而且还有 N 个版本还有各种社区版交错,当然还有之前一直用的破解版,会不会是版本的问题呢?既然公司现在可以提供企业版,那就没理由继续盗版了,而且那是好几年前了。虽然电脑换过很多次了,但是每次都是 Time Machine,所以配置什么的是一直同步着的,而且 IDEA 是 Java 写的,找 BUG 找问题的思路跟开发 Java 应用的时候也应该是类似的。
runzhliu
2020/08/06
1.7K0
iOS 引导页实现方式
主要用在修改一些组件的默认样式 这里用于获取UIPageControl的属性 修改原来的点为自己的图片
码客说
2019/10/22
1.4K0
使用iOS应用程序进行数据采集:从入门到实践
随着移动互联网的普及,越来越多的数据产生于移动设备。为了更好地了解用户行为、优化产品体验,我们需要在iOS应用程序中进行数据采集。本文将指导您如何在iOS应用中实现数据采集,从基本概念到实际操作。
用户614136809
2023/09/04
3010
从微信小程序文章列表进入详情页时,如何无加载打开详情页
我在写「一个程序手册」的接口,在列表页的时候就把文章的所有数据都加载了,所以从文章列表进入详情页的时候,其实数据都已经有了,那么我们是否做到不请求接口直接打开详情页呢?
Denis
2023/04/14
3690
C#应用程序配置文件
代码: <?xml version="1.0" encoding="utf-8" ?> <configuration> <connectionStrings> <add n
明明如月学长
2021/08/27
5170
webstorm配置本机IP使手机能打开pc端界面
最近项目使用原生html开发,虽然webstorm自带localhost的访问,但是手机端并不能直接这样写地址,所以需要配置本机IP地址的访问,以便在手机端也能看到h5页面的效果,避免未知的bug问题。
用户10106350
2022/10/28
9920
webstorm配置本机IP使手机能打开pc端界面
IOS 读写配置文件plist
1 import UIKit 2 class ViewController:UIViewController { 3 4 override func viewDidLoad() { 5 super.viewDidLoad() 6 // Do any additional setup after loading the view, typically from a nib. 7 8 let plistPath = Bundle.main.path(forResource:“demoPlist”, ofType:“plist”) 9 let data:NSMutableDictionary = NSMutableDictionary.init(contentsOfFile:plistPath!)! 10 let message = data.description 11 let name = data[“Name”] 12 let age = data[“Age”] 13 14 print(message) 15 print(name) 16 print(age) 17 } 18 }
用户5760343
2019/07/10
6420
iOS 启动页后广告Demo
重点!       对于启动页后的广告,相信大家也都看到过很多很多的,比如我自己常看到的有 QQ音乐,爱奇艺了。你点击了APP,它会启动就会随之启动。。其实这些APP的启动页是没有消失的,你去认真的
Mr.RisingSun
2018/01/09
1.9K0
iOS 启动页后广告Demo
iOS 点击通知打开对应页面
这时如果点击通知的显示按钮,会调用didFinishLaunchingWithOptions,不会调用didReceiveRemoteNotification方法。
码客说
2019/10/22
2.7K0
iOS | Xcode中快速打开终端
来自蒙山大洼风景区的炫彩大蜘蛛,大概有成年人的小拇指指肚那么大,拍于2022年10月。小时候玩具少,常拿这种大蜘蛛做玩具。找一个两股叉的树枝,蜘蛛在上面爬的时候就旋转树枝,然后就得到了一个网。
CnPeng
2023/01/11
3.4K0
iOS | Xcode中快速打开终端
iOS自动打开闪光灯
现在好多应有都具备扫码功能,为了减少用户操作,一般会在光线比较暗的时候,自动打开闪光灯: 1、导入头文件 #import <AVFoundation/AVFoundation.h> #import <ImageIO/ImageIO.h> 2、创建设备、输入输出流 // 1.获取硬件设备 AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; // 2.创建输入流
czjwarrior
2018/05/28
1.2K0
iOS 工程文件.xcodeproj无法打开
感谢以下大佬: https://www.jianshu.com/p/e82ec6a56fc2 https://blog.csdn.net/kuangdacaikuang/article/details/52987132 https://www.jianshu.com/p/dd58925dfa5d![sabo.png]
且行且珍惜_iOS
2018/10/25
3K0
减小iOS应用程序的大小
A: 本文收集了一些减小程序安装包大小的相关技巧(当第一次下载和安装程序时)。如果是针对升级程序的话,可以看这篇文章(减小iOS应用程序升级时所需下载的大小)(这与第一次安装使用的工作原理有所不同)。
HelloWorld杰少
2022/08/03
7020
从服务器映射 jupyter 到本机应用
简而言之,Jupyter Notebook是以网页的形式打开,可以在网页页面中直接编写代码和运行代码,代码的运行结果也会直接在代码块下显示。如在编程过程中需要编写说明文档,可在同一个页面中直接编写,便于作及时的说明和解释。
为为为什么
2022/08/05
1.1K0

相似问题

从本机应用程序打开线路配置文件

10

如何从我的应用程序中打开LinkedIn连接配置文件?

25

iOS 8;从javascript打开本机应用程序

10

如何在Windows Phone上的LinkedIn应用程序中打开LinkedIn配置文件?

10

如何从我的应用程序中打开IOS Linkedin学习应用程序

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文