相关疑难解决方法(0)

.NET Integer vs Int16?

我有一个可疑的编码实践.

当我需要遍历计数限制不足的项目的小列表时32000,我使用的Int16是我的i变量类型而不是Integer.我这样做是因为我认为使用它Int16比完全吹制效率更高Integer.

我错了吗?使用Int16vs与Integer?之间没有有效的性能差异吗?我应该停止使用Int16并坚持Integer我的所有计数/迭代需求吗?

.net c# vb.net variables types

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

使用小数据类型(例如short而不是int)是否会减少内存使用量?

我的问题基本上是关于C#编译器如何处理小数据类型的内存分配.我知道例如像add这样的运算符是在int上定义的而不是在short上定义的,因此计算将被执行,好像short是int成员一样.

假设如下:

  • 没有业务逻辑/验证逻辑与短数据类型的选择相关联
  • 我们没有对不安全的代码做任何事情

是否尽可能使用短数据类型会减少应用程序的内存占用量,是否建议这样做?或者使用short等不值得花费,因为编译器例如分配int32的完整内存ammount并在进行算术时添加额外的强制转换.

任何关于假定的运行时性能影响的链接都将非常感激.

相关问题:

我为什么要在C#中使用int而不是字节或short

整数蓝色,短+ +短问题

c# types memory-management short

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

在背靠背for循环中的int,short,byte性能

(背景:为什么我应该在C#中使用int而不是字节或short)

为了满足我自己对使用"适当大小"整数与"优化"整数的优缺点的好奇心,我编写了以下代码,强化了我以前在.Net中对int性能的真实性(并在链接中对此进行了解释)以上)它是针对int性能而不是short或byte进行优化的.

DateTime t;
long a, b, c;

t = DateTime.Now;
for (int index = 0; index < 127; index++)
{
    Console.WriteLine(index.ToString());
}           
a = DateTime.Now.Ticks - t.Ticks;

t = DateTime.Now;
for (short index = 0; index < 127; index++)
{
    Console.WriteLine(index.ToString());
}

b=DateTime.Now.Ticks - t.Ticks;

t = DateTime.Now;           
for (byte index = 0; index < 127; index++)
{
    Console.WriteLine(index.ToString());
}
c=DateTime.Now.Ticks - t.Ticks;

Console.WriteLine(a.ToString());
Console.WriteLine(b.ToString());
Console.WriteLine(c.ToString());
Run Code Online (Sandbox Code Playgroud)

这在......的范围内给出了大致一致的结果.

〜95万

〜2000000

〜1700000

这与我期望看到的一致.

但是当我尝试重复每个数据类型的循环时......

t = DateTime.Now;
for (int …
Run Code Online (Sandbox Code Playgroud)

c# performance types for-loop

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

我应该在固定类型大小的langs中使用'long'代替'int'而不是'int'(如Java,C#)

在10年甚至5年内,将没有[ Edit2:服务器或桌面] 32位CPU.

那么,使用int(32位)long(64位)有什么优势吗?
使用中有什么缺点int吗?


编辑:

  1. 通过10 or 5 years我的意思是在绝大多数地方,这些LANGS使用

  2. 我的意思是默认使用哪种类型.这一天,我甚至都不愿意考虑是否应该使用short循环计数器for(int i....long计数器已经赢了同样的方式

  3. 寄存器已经是64位,32位类型已经没有增益.我认为8位类型有一些损失(你必须使用更多位然后你正在使用)

c# java d 32bit-64bit

11
推荐指数
2
解决办法
7358
查看次数

我是否更喜欢在C++代码中使用小类型的int(int8和int16)?

我在嵌入式Linux的C++/Qt项目中工作,我们经常"决定"反对我们处理器的局限性,特别是在更新用户界面中的图形时.由于这些限制(特别是我们前一段时间甚至更糟糕的情况),我会尽可能地优化代码,如果优化成本最低的话.我正在做的一个优化是始终对我正在处理的情况使用正确的整数值:qint8,qint16和qint32取决于我需要的值有多大.

但是前段时间我在某个地方读到,在可能的情况下,我不应该尝试使用最小的整数,我应该总是更喜欢使用与处理器容量相关的整数值,也就是说,如果我的处理器是32位的,那么即使不需要这么大的整数,我也应该总是使用qint32.在第一时刻,我无法理解为什么,但这个问题的答案表明,这是因为当处理器必须使用其"默认大小整数"时,处理器的性能会更高.

好吧,我不相信.首先没有提供实际的参考来证实这样的论点:我只是无法理解为什么从32位存储器空间写入和读取比使用32位整数更慢(并且给出的解释不是很容易理解,顺便说一句.其次,当我需要将数据从一侧传输到另一侧时,例如当使用Qt的信号和插槽机制时,我的应用程序上有一些时刻.由于我将数据从一个点传输到另一个点,不应该是较小的数据总能比较大的数据有所改进吗?我的意思是发送两个字符(不是通过引用)的信号不应该更快地完成工作然后发送两个32位整数?

事实上,虽然"处理器解释"建议使用处理器的特性,但其他情况则表明相反.例如,在处理数据库时,这个和这个线程都表明在使用较小版本的整数时有一个优势(即使只是在某些情况下).

所以,毕竟,当上下文允许或不允许时,我是否应该使用小类型的int?或者,当一种方法或另一种方法更有可能给出更好或更差的结果时,是否有一个案例列表?(例如,我在使用数据库时应使用int8和int16,但在所有其他情况下我的处理器的默认类型)

并且作为最后一个问题:Qt通常具有基于int的函数实现.在这种情况下,施法操作是否会通过使用次要整数来消除任何可能的改进?

c++ embedded performance qt integer

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

为什么Color使用Int32 over Byte?

使用此示例:

Color.FromArgb(Int32,Int32,Int32)

根据指定的8位颜色值(红色,绿色和蓝色)创建颜色结构.alpha值隐式为255(完全不透明).尽管此方法允许为每个颜色分量传递32位值,但每个分量的值限制为8位.

如果每个组件的值限制为8位,那么他们为什么不使用Byte而不是Int32?

在更广泛的范围内,我发现人们使用Int32非常普遍,即使是Int16或者Byte足够.是否有使用什么特别的原因Int32 一般过Int16,Byte等?

.net c# types

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

有没有理由更喜欢单精度到双精度数据类型?

我习惯于在保留语义的同时选择完全表示我的值所需的最小数据类型.我不使用long时,int是保证足够了.同为intVS short.

但对于实数,在C#中有常用的double- 没有相应的single或float.我仍然可以使用System.Single,但我想知道为什么C#没有把它变成像他们那样的语言关键字double.

与此相反,也有语言的关键字short,int,long,ushort,uint,和ulong.

那么,这是否向开发人员发出信号,即单精度是过时的,已弃用的,或者不应该用于赞成double或decimal?

(毋庸置疑,单精度具有较低精度的缺点.这对于较小尺寸来说是众所周知的权衡,所以我们不要关注它.)

编辑:道歉,我错误地认为这float不是C#中的关键字.但事实是,这使得这个问题没有实际意义.

.net c#

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

lambda表达式中不可能的值

任何人都可以告诉我,这段代码怎么可能:

for (byte i = 0; i < someArray.Length; i++)
{
    pool.QueueTask(() =>
        {
            if (i > 0 && i < someArray.Length)
            {
                myFunction(i, someArray[i], ID);
            }
        });
}
Run Code Online (Sandbox Code Playgroud)

落在myFunction调用的行上,IndexOutOfRangeException因为i变量的值等于someArray.Length?我真的不明白......

注意:pool是具有2个线程的简单线程池的实例.

注2:bytefor循环中的类型是故意放置的,因为数组长度不能超过字节最大值(根据前面创建数组的逻辑),我需要变量i为类型byte.

c# arrays concurrency lambda

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