小编meJ*_*rew的帖子

为什么在使用对象之前不会运行实例化对象?

在C#中,我已经注意到如果我运行以下代码对我的内存没有任何影响:

Console.WriteLine("press a key to allocate the memory");
Console.ReadKey();
double[] hudgeBunchOfMemory = new double[100000000];
Console.WriteLine("allocated");
Console.ReadKey();
Run Code Online (Sandbox Code Playgroud)

但是如果我遍历数组并使用它们,那么分配就会运行,就像在这个示例中一样:

Console.WriteLine("press a key to allocate the memory");
Console.ReadKey();
double[] hudgeBunchOfMemory = new double[100000000];
for (long i = 0; i < 100000000; i++)
{
    hudgeBunchOfMemory[i] = i + 1;
}
Console.WriteLine("allocated");
Console.ReadKey();
Run Code Online (Sandbox Code Playgroud)

什么产生这种行为?

编辑

我已经在发布和调试模式下使用Visual Studio 2012破坏了代码,并且我已经通过任务管理器评论了内存更改,并且可以非常简单地观察到差异,因为它需要800Mb的内存.

关于这种行为最合适的问题是:代码是否已执行,内存是否仍然没有被占用,或者根本没有被执行,并且被JIT编译器避免了?

c# jit memory-management

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

强制派生类调用具有实现的基方法

我有一个A派生自 class 的类B

public class B
{
   protected void Run() // pass data here used by all 3 Run methods
   {
     BeforeRun();
     RunInternal();
     AfterRun();
   }

   private void RunInternal()
   {

   }

   private void BeforeRun()
   {

   }

   private void AfterRun()
   {

   }
}

public class A : B
{

}
Run Code Online (Sandbox Code Playgroud)

强制从 B 类继承的用户必须调用基本方法的最近成就是什么Run()

在您想要的地方添加protectedvirtualabstract等,我可以随意更改您的建议。

c#

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

C#中的引用到底是什么

从我现在所理解的,我可以说C#中的引用是一种指向具有引用计数的对象的指针,并且知道类型兼容性.我的问题不是关于值类型如何与引用类型不同,而是关于如何实现引用的更多信息.

我已经阅读了这篇文章,介绍了引用和指针之间的差异,但这并没有涵盖引用的内容,但是它与C++中的指针相比,它描述了更多的属性.我也理解传递引用传递值之间的差异(因为C#对象默认按值传递,甚至是引用),但是当我试图向我解释时,我很难理解什么是真正的引用.同事为什么通过引用发送的参数不能存储在闭包内,如Eric Lippert 博客条目中关于堆栈作为实现细节.

有人可以向我提供一个完整的,但希望简单的解释,说明C#中的引用是什么,还有一些关于它们是如何被赋予的?

编辑:这不是重复,因为在C#中的Reference类型中,它解释了引用如何工作以及它与值的不同之处,但我要问的是如何在低级别定义引用.

c# pointers reference

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

如果我将新数组分配给现有值类型数组会发生什么?

假设我有以下代码:

float[] test = new float[10];
for(int i = 0; i < 10; i++)
{
     test[i] = i + 1.0f;
}
Run Code Online (Sandbox Code Playgroud)

我将一个新的浮点数重新分配给测试数组,如下所示:

test = new float[10];
Run Code Online (Sandbox Code Playgroud)

通过Console.WriteLine调试后,显示reassign的test值为0,test是不是引用了新创建的float数组,还是之前的数组被清空重新创建?

我已经阅读了一些关于堆和堆栈的文章,但这并没有解决我的困惑。

c#

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

如何在c#中将ascii字符转换为字节

您好,我在从 ASCII 转换为字节时遇到了问题。我有代码:

byte M = Convert.ToByte('M');
Run Code Online (Sandbox Code Playgroud)

但这从 UTF-16 转换为字节,我不想要。在我的问题中,我想用 ASCII 代码发送字节。

c# ascii

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

标签 统计

c# ×5

ascii ×1

jit ×1

memory-management ×1

pointers ×1

reference ×1