C#中的指针以及它在应用程序中的使用频率?

时间:2009-06-16 13:36:04

标签: c# c++ pointers

对我来说,Pointer是C ++编程语言中最难的概念之一。当我学习C ++时,我花了很多时间学习它。但是,现在我主要在完全用C#,VB.NET等语言编写的项目中工作。事实上,我已经有近四年没有接触过C ++了。尽管如此,C#有指针,但我还没有考虑我必须在C#中使用指针的情况。所以我的问题是,通过使用指针,我们可以在C#中获得什么样的生产力?必须使用指针的情况是什么?

4 个答案:

答案 0 :(得分:3)

你已经在C#中使用了很多指针,除了它们看起来不像指针。每次使用类的实例执行某些操作时,这都是指针。你已经获得了几乎所有潜在的好处,没有麻烦。

可以在C#中更明确地使用指针,这是C#指针大多数人的意思,但我认为这种情况非常罕见。它们可能对链接到C库等很有用,但除此之外我没有看到太多用途。

答案 1 :(得分:2)

就个人而言,我从来没有需要在.NET中使用指针,但如果你正在处理绝对性能关键代码,你就会使用指针。如果你看一下System.String类,你会发现很多处理字符串操作的方法都使用指针。此外,在处理图像处理时,使用指针通常很有用。现在,人们可以肯定地说这些应用程序是否应该首先用.NET编写(我认为应该这样),但至少如果你需要挤出额外的速度,你可以。

答案 2 :(得分:1)

我只在少数情况下使用C#中的指针,这些情况主要与发送/接收数据有关,在这种情况下你必须将字节数组转换为结构,反之亦然。虽然即便如此,你也不必直接处理指针。

在某些情况下,您可以使用指针来提高性能,因为使用Marshaller时,有时您必须复制内存才能访问数据,而使用指针时,您可以直接访问它(想想Bitmap.Lock())。

答案 3 :(得分:0)

就个人而言,我从来不需要在C#中使用指针。如果我需要这种功能,我在C ++ / CLI中编写该代码,并从C#中调用它。如果我需要将指针从C#传递到C ++ / CLI,反之亦然,我将它们作为 IntPtr 传递给它,并将其转换为我在C ++ / CLI中需要的类型。

在我看来 - 如果您在C#中使用指针,在99%的情况下,您使用的语言是错误的。

修改 关于C ++ / CLI的好处是,您可以将单个类标记为仅本机编译。我做了很多图像处理工作,需要很快发生;它使用了很多基于指针的代码。我通常有一个托管C ++ / CLI对象转发调用我的处理发生的本机C ++对象。我打开了原生代码和中提琴的优化,我获得了不错的性能提升。

当然,只有通过执行本机优化代码获得的性能提升可以抵消托管到非托管转换的开销,这才有意义。就我而言,它总是如此。