我正在阅读一个由Introversion游戏编码器撰写的博客文章,他正在忙着试图从代码中挤出每一个CPU蜱.他提到的一个伎俩是
"将类的成员变量重新排序为最常用和最少使用的."
我不熟悉C++,也不熟悉它的编译方式,但我想知道是否
我知道这个技巧节省的(CPU)时间量是最小的,这不是一个交易破坏者.但另一方面,在大多数函数中,很容易识别哪些变量将是最常用的,并且默认情况下只是以这种方式开始编码.
关于C#中内部类的使用和结构的最佳实践是什么?
例如,如果我有一个非常大的基类和两个大的内部类,我应该将它们分成单独的(部分类)代码文件,还是将它们作为一个非常大的笨重的代码文件?
具有抽象类的公共继承内部类也是不好的做法吗?
无论可能实现相同结果的其他选项(即手动添加断点),是否可以以编程方式将断点添加到Visual Studio项目的源代码中?
如:
try
{
FunctionThatThrowsErrors(obj InscrutableParameters);
}
catch(Exception ex)
{
Log.LogTheError(ex);
AddBreakPointToCallingFunction();
}
Run Code Online (Sandbox Code Playgroud)
这样,当您下次运行调试时,它将自动在上次运行中导致故障的所有点上设置断点.
我不是说这是一种特别有用的调试方式.我只是想知道能力是否存在.
是否有任何用于编写可与Windows更新接口的C#程序的API,并使用它来有选择地安装某些更新?
我正在考虑将列表存储在已批准更新的中央存储库中.然后,客户端应用程序(必须安装一次)将与Windows Update连接以确定可用的更新,然后安装批准列表中的更新.这样,更新仍然从客户端角度自动应用,但我可以选择正在应用哪些更新.
顺便说一下,这不是我在公司中的角色,我真的只是想知道是否有一个用于Windows更新的API以及如何使用它.
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获取释放的顺序是否会有所不同.
无论这是否是一个好主意,是否可以实现一个接口,其中执行函数知道调用对象的类型?
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的答案则提出了我之前未曾考虑过的解决方案.
一位同事和我正在讨论浏览器中的内容和内容.
然后提出一个问题,我们都不能肯定地回答.
您是否可以创建一个网页,当您导航到它时,它会启动客户端打印机并尝试打印文档.例如,每当你访问我的个人网站时,你都会被打印出我的照片,微笑着.
现在,这是一个可怕的想法.我意识到.但讨论引起了我的兴趣,如果可以做到,以及如何做到.我的朋友坚持认为,你能做的最好的就是为用户弹出打印对话框,他们必须自己点击打印.
是否有可能绕过这一步?或者只是一些花哨的脚本将鼠标移到打印按钮上并单击它?或者使用activeX控件直接与Printer API连接?
如果我有一个基类和两个派生类,并且我想手动实现两个派生类之间的转换,有没有办法做到这一点?(在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
在我的应用程序中,有一个特定的时间,一次释放大量的大对象.那时我想特别针对大对象堆(LOH)进行垃圾收集.
我知道你不能这样做,你必须打电话,GC.Collect(2)因为只有在进行第2代收集时才会在LOH上调用GC.但是,我在文档中读到,调用GC.Collect(2)仍然会在第1代和第0代运行GC.
是否可以强制GC 仅收集第2代,而不包括第1代或第0代?
如果不可能,是否有理由以这种方式设计GC?
如果我有一个私有变量,我想要进行一些内部验证,并且我想将验证放在一个地方,我把它放在一个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# ×7
.net ×2
breakpoints ×1
c++ ×1
casting ×1
embedded ×1
locking ×1
optimization ×1
performance ×1
printing ×1
types ×1