问题标签 [bytearray]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
591 浏览

c# - 为什么 System/mscorlib 代码这么快?特别是对于循环?

这只是我一直在研究的一个个人项目。基本上,我使用 StreamReader 解析一个文本文件(比如从 2​​0mb 到大约 1gb)。性能非常稳定,但仍然......我一直很想看看如果我用二进制解析它会发生什么。不要误会,我并没有过早地优化。我绝对是为了“看”而故意进行微优化。

所以,我正在使用字节数组读取文本文件。来看看,新行可以是(Windows)标准的 CR/LF 或 CR 或 LF ......相当混乱。我曾希望能够在 CR 上使用 Array.IndexOf,然后跳过 LF。相反,我发现自己编写的代码与 IndexOf 非常相似,但会检查其中任何一个并根据需要返回一个数组。

所以症结所在:使用与 IndexOf 非常相似的代码,我的代码最终仍然非常慢。使用 800mb 文件来透视它:

  • 使用 IndexOf 并寻找 CR:~320mb/s
  • 使用 StreamReader 和 ReadLine:~180mb/s
  • for 循环复制 IndexOf:~150mb/s

这是带有 for 循环的代码(~150mb/s):

这是更快的代码块(~320mb/s):

(不,它还没有准备好生产,某些情况下它会爆炸;我使用 128kb 大小的缓冲区来忽略其中的大部分。)

所以我的大问题是......为什么 Array.IndexOf 工作得这么快?它本质上是相同的,一个 for 循环遍历一个数组。mscorlib 代码的执行方式有什么问题吗?即使将上面的代码更改为真正复制 IndexOf 并仅查找 CR,然后像使用 IndexOf 没有帮助时那样跳过 LF。Errr ...我一直在经历各种排列,而且已经太晚了,也许我错过了一些明显的错误?

顺便说一句,我查看了 ReadLine 并注意到它使用 switch 块而不是 if 块......当我做类似的事情时,奇怪的是它确实将性能提高了大约 15mb/s。这是另一个问题(为什么 switch 比 if 更快?)但我想我会指出我确实看过它。

此外,我正在测试 VS 之外的发布版本,因此没有进行调试。

0 投票
2 回答
7323 浏览

bytearray - 创建缩略图,然后转换为字节数组

我在创建缩略图然后将它们转换为字节数组方面花了很多时间。我已经尝试了三种方法,并且所有 3 次都出现错误。

第一个是使用Bitmap.GetThumbnailImage,我以前用过,然后直接保存到Response.OutputStream

第二个是使用带有 DrawImage() 的 System.Drawing.Graphics。还是不行。

第三个只是创建一个新的位图,传入旧的位图,并设置新的大小。同样的错误。

值不能为空。
参数名称:encoder

描述:当前web请求执行过程中出现未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.ArgumentNullException:值不能为空。
参数名称:编码器

源错误:
在执行当前网络请求的过程中产生了一个未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常起源和位置的信息。

堆栈跟踪:
[ArgumentNullException:值不能为空。
参数名称:编码器]
System.Drawing.Image.Save(Stream 流,ImageCodecInfo 编码器,EncoderParameters encoderParams) +615244

这是我的方法的代码。也许有人会看到我做错了什么。如果您不确定 GetThumbSize,它只是一种获取图像大小和最大拇指大小然后计算实际大小以保持纵横比的方法。

此行抛出错误:

有任何想法吗?谢谢您的帮助!

0 投票
8 回答
69683 浏览

c# - 在 C# 中附加两个或多个字节数组

有没有最好的(见下文)在 C# 中附加两个字节数组的方法?

假装我有完全的控制权,我可以使第一个字节数组足够大以在最后容纳第二个字节数组并使用Array.CopyTo函数。或者我可以遍历单个字节并进行分配。

有没有更好的方法?我无法想象像将字节数组转换为字符串并将它们连接起来并将它们转换回来这样的事情会比上述任何一种方法都好。

就最佳/更好(按顺序)而言:

  1. 最快的
  2. 最少的 RAM 消耗

一个限制是我必须在 .NET 2.0 框架中工作。

推荐的两个选择是 MemoryStream 和 BlockCopy。我已经对 10,000,000 个循环进行了 3 次简单的速度测试,得到了以下结果:

3 次运行 10,000,000 次循环的平均值(以毫秒为单位):

  • BlockCopy Time: 1154 , 范围为 13 毫秒
  • MemoryStream GetBuffer 时间:1470,范围为 14 毫秒
  • MemoryStream ToArray Time:1895,范围为3毫秒
  • CopyTo Time:2079,范围为19毫秒
  • 逐字节时间:2203,范围为10毫秒

List<byte> AddRange超过 1000 万次循环的结果:List<byte> 时间:16694

相对 RAM 消耗(1 是基线,越高越差):

  • 逐字节:1
  • 块复制:1
  • 复制到:1
  • 内存流获取缓冲区:2.3
  • MemoryStream ToArray:3.3
  • 列表<字节>:4.2

测试表明,一般来说,除非你正在做大量的字节副本[我是],否则查看字节副本不值得关注[例如,1000 万次运行产生多达 1.1 秒的差异]。

0 投票
1 回答
1946 浏览

c# - 如何将 Silverlight ImageSource 转换为 byte[]?

我的画布上有一个简单的 ImageSource silverlight 控件。工作正常。有什么方法可以将 ImageSource 的内容提取到字节数组中?

干杯!

PS。任何版本的 SL 都可以。

0 投票
1 回答
707 浏览

asp-classic - 使用 adodb 检索时间戳字段的值 - 如何从经典 asp 中读取字节数组

我正在使用 asp 和 adodb,查询数据库(ms sql 2005)

我有一个名为 stamp 的字段,类型为 timestamp

在asp我得到以下

field.ActualSize: 8 field.DefinedSize: field.Name: Stamp field.Type: adBinary (128)

field.Attributes: 528 (adFldFixed (16) + adFldRowVersion (512) ) (所以 adFldLong 没有打开,所以我不能使用 getchunk 方法!) http://msdn.microsoft.com/en-us/library/ ms676678(VS.85).aspx

在调试器中,如果我输入 field.value 我会得到以下信息

这就是我想要得到的!!!!但我不知道该怎么做...

我可以将它分配给一个变量,但我无法获取每个元素

我试过了

(参数数量错误)

所以,问题是我有一个字节数组,好吧,我怎么读它???

0 投票
7 回答
4142 浏览

c# - C#:什么会占用更多内存?字符串还是字节数组?

C#:什么会占用更多内存?字符串还是字节?

假设我有一行读取“我的文本”,该行会以哪种形式占用更多内存,作为字节还是字符串?

0 投票
1 回答
22787 浏览

c# - C#:在 XML 中存储字节数组

在 XML 中存储 Byte[] 数组的简单方法是什么(使用 C#)?

0 投票
4 回答
5491 浏览

c# - 如何将字节数组转换为字符串?

使用以下功能:http: //msdn.microsoft.com/en-us/library/system.security.cryptography.rijndaelmanaged.aspx

如您所见,它返回一个字节数组,我想将字节数组转换为字符串。

如何将它从字节数组转换为字符串,反之亦然?

0 投票
3 回答
2836 浏览

actionscript-3 - Flash -> ByteArray -> AMFPHP -> 无效图像?

我将图像加载到 Flash 中并使用 JPGEncoder 将图像编码为 ByteArray 并将其发送到 AMF PHP,后者将 bytearray 写入文件。这一切似乎都可以正常工作,我可以在 Photoshop CS4 中下载生成的文件绝对没问题。当我尝试从桌面打开它或在 Flash 中打开它时,它不起作用... Picasa 我的默认图片浏览器显示“无效”

这是我用来将字节数组写入文件的代码 -

就是这样......我使用NetConnection类连接并调用服务,我需要说我发送jpg数据吗?我认为 JPGEncoder 会处理这个问题。如何在写入文件之前验证字节数组?我是否需要设置 MIME 类型或其他东西.. 请原谅有点菜鸟的问题,一点知识可能是一件危险的事情。

谢谢

--------------------------------------- 第二部分 --------- ---------------------------------

这是一些代码 -

1) 将图像加载到 Flash 播放器中

非常感谢你的帮助

0 投票
2 回答
6486 浏览

c# - C#:xml CData 中的字节数组

我有一个返回 xml 块的 WCF 服务。一个元素是 CData[] 部分。我的应用程序从数据库中读取 HTML 文件,并使用 ABCPDF 将其转换为 PDF byte[] 数组。然后在我的 XmlWriter 中,我将字节添加到 CData 部分。

问题是生成的 xml 如下所示:

如何将字节串放入 CData 部分?我试过这样的事情:

我卡住了!!任何帮助都会很棒,谢谢!