小编Dev*_*inB的帖子

在C++中优化成员变量顺序

我正在阅读一个由Introversion游戏编码器撰写博客文章,他正在忙着试图从代码中挤出每一个CPU蜱.他提到的一个伎俩是

"将类的成员变量重新排序为最常用和最少使用的."

我不熟悉C++,也不熟悉它的编译方式,但我想知道是否

  1. 这个说法准确吗?
  2. 如何/为什么?
  3. 它是否适用于其他(编译/脚本)语言?

我知道这个技巧节省的(CPU)时间量是最小的,这不是一个交易破坏者.但另一方面,在大多数函数中,很容易识别哪些变量将是最常用的,并且默认情况下只是以这种方式开始编码.

c++ embedded optimization performance

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

在C#中使用内部类

关于C#中内部类的使用和结构的最佳实践是什么?

例如,如果我有一个非常大的基类和两个大的内部类,我应该将它们分成单独的(部分类)代码文件,还是将它们作为一个非常大的笨重的代码文件?

具有抽象类的公共继承内部类也是不好的做法吗?

c# inner-classes

27
推荐指数
5
解决办法
5万
查看次数

以编程方式在Visual Studio中应用/停用断点

无论可能实现相同结果的其他选项(即手动添加断点),是否可以以编程方式将断点添加到Visual Studio项目的源代码中?

如:

try
{
    FunctionThatThrowsErrors(obj InscrutableParameters);
}
catch(Exception ex)
{
    Log.LogTheError(ex);
    AddBreakPointToCallingFunction();
}
Run Code Online (Sandbox Code Playgroud)

这样,当您下次运行调试时,它将自动在上次运行中导致故障的所有点上设置断点.

我不是说这是一种特别有用的调试方式.我只是想知道能力是否存在.

.net c# breakpoints visual-studio

17
推荐指数
2
解决办法
9194
查看次数

使用C#与Windows Update进行交互

是否有任何用于编写可与Windows更新接口的C#程序的API,并使用它来有选择地安装某些更新?

我正在考虑将列表存储在已批准更新的中央存储库中.然后,客户端应用程序(必须安装一次)将与Windows Update连接以确定可用的更新,然后安装批准列表中的更新.这样,更新仍然从客户端角度自动应用,但我可以选择正在应用哪些更新.

顺便说一下,这不是我在公司中的角色,我真的只是想知道是否有一个用于Windows更新的API以及如何使用它.

c# windows-update

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

我可以在锁内放一个return语句

Dupe: 在锁定程序中返回声明:内部或外部

标题有点误导.我知道你可以做到,但我想知道性能影响.

考虑这两个代码块.(没有错误处理)

这个区块有return锁外

 public DownloadFile Dequeue()
 {
     DownloadFile toReturn = null;
     lock (QueueModifierLockObject)
     {
         toReturn = queue[0];
         queue.RemoveAt(0);
     }
     return toReturn;
 }
Run Code Online (Sandbox Code Playgroud)

该块具有锁return语句

 public DownloadFile Dequeue()
 {
     lock (QueueModifierLockObject)
     {
         DownloadFile toReturn = queue[0];
         queue.RemoveAt(0);

         return toReturn;
     }
 }
Run Code Online (Sandbox Code Playgroud)

代码有什么不同吗?我理解性能差异(如果有的话)是最小的,但我特别想知道lock获取释放的顺序是否会有所不同.

c# locking

15
推荐指数
1
解决办法
7722
查看次数

在C#中确定调用对象类型

无论这是否是一个好主意,是否可以实现一个接口,其中执行函数知道调用对象的类型?

class A
{
   private C;

   public int doC(int input)
   {
      return C.DoSomething(input);
   }
}

class B
{
   private C;

   public int doC(int input)
   {
      return C.DoSomething(input);
   }
}

class C
{
   public int DoSomething(int input)
   {
      if(GetType(CallingObject) == A)
      {
         return input + 1;
      }
      else if(GetType(CallingObject) == B)
      {
         return input + 2;
      } 
      else
      {
         return input + 3;
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

在我看来,这是一个糟糕的编码实践(因为参数不会改变,但输出会)但除此之外是否可能?

我在某种情况下,我想要一些特定的类型能够调用某个函数,但我无法排除对该函数的访问.我想过有一个"类型"参数

DoSomething(int input, Type callingobject)
Run Code Online (Sandbox Code Playgroud)

但是不能保证调用对象会使用GetType(this),而不是GetType(B)来欺骗B而不管它们自己的类型.

这会像检查callstack一样简单(相对简单)吗?


编辑

请把JaredPar的答案(如果你想的话)和John Feminella的答案一起投票.我无法将这两个答案都标记为已被接受,我接受了John Feminella的答案,因为它特别符合我的要求,而Jared的答案则提出了我之前未曾考虑过的解决方案.

c# types

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

从网站自动打印图像

一位同事和我正在讨论浏览器中的内容和内容.

然后提出一个问题,我们都不能肯定地回答.

您是否可以创建一个网页,当您导航到它时,它会启动客户端打印机并尝试打印文档.例如,每当你访问我的个人网站时,你都会被打印出我的照片,微笑着.

现在,这是一个可怕的想法.我意识到.但讨论引起了我的兴趣,如果可以做到,以及如何做到.我的朋友坚持认为,你能做的最好的就是为用户弹出打印对话框,他们必须自己点击打印.

是否有可能绕过这一步?或者只是一些花哨的脚本将鼠标移到打印按钮上并单击它?或者使用activeX控件直接与Printer API连接?

printing web-applications

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

覆盖(演员)

如果我有一个基类和两个派生类,并且我想手动实现两个派生类之间的转换,有没有办法做到这一点?(在C#中)

abstract class AbsBase
{
   private int A;
   private int B;
   private int C;
   private int D;
}

class Imp_A : AbsBase
{
   private List<int> E;
}


class Imp_B : AbsBase
{
   private int lastE;
}
Run Code Online (Sandbox Code Playgroud)

通常我会从Imp_A - > Imp_B进行转换,我希望E列表中的最后一个值是'LastE'.此外,如果有三个或更多实现类(例如Salary,Hourly,Consultant和Former Employees),该怎么办?

无论这在架构上是否合理(我无法描述整个应用程序并且简洁)是否可能?

我打算写一个转换器,除了据我所知,转换器将创建一个Imp_B类的新对象,我不需要它,因为'employee'在任何时候都只是其中一个选项.

-Devin

c# casting

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

GC.Collect仅限第2代和大对象堆

在我的应用程序中,有一个特定的时间,一次释放大量的大对象.那时我想特别针对大对象堆(LOH)进行垃圾收集.

我知道你不能这样做,你必须打电话,GC.Collect(2)因为只有在进行第2代收集时才会在LOH上调用GC.但是,我在文档中读到,调用GC.Collect(2)仍然会在第1代和第0代运行GC.

是否可以强制GC 收集第2代,而不包括第1代或第0代?

如果不可能,是否有理由以这种方式设计GC?

.net garbage-collection large-object-heap

8
推荐指数
2
解决办法
7837
查看次数

强制获取/设置私有属性的私有变量的访问权限

如果我有一个私有变量,我想要进行一些内部验证,并且我想将验证放在一个地方,我把它放在一个getter/setter后面,只能访问getter/setter.这在处理公共属性时很有用,因为其他代码无法访问私有变量,但是当我在类本身内部处理对象时,有没有办法强制执行getter/setter?

  private int _eyeOrientation;

  private int eyeOrientation
  {
     get
     {
        return _eyeOrientation;
     }
     set
     {
        if (value < 0)
        {
           _eyeOrientation = 0;
        }
        else
        {
           _eyeOrientation = value % 360;
        }
     }
  }
Run Code Online (Sandbox Code Playgroud)

这里的问题是类中的其他函数可能会意外修改

_eyeOrientation = -1;

这将使程序陷入眩晕.有没有办法让它抛出编译器错误?

c#

6
推荐指数
2
解决办法
3776
查看次数