一般建议您不应该GC.Collect
从您的代码中调用,但此规则的例外情况是什么?
我只能想到一些非常具体的案例,强制垃圾收集可能是有意义的.
想到的一个例子是服务,每隔一段时间醒来,执行一些任务,然后长时间睡眠.在这种情况下,强制收集以防止即将空闲的进程保持比需要的更多内存可能是个好主意.
是否还有其他可以接听电话的情况GC.Collect
?
许多人似乎都同意,Singleton模式有许多缺点,有些甚至建议完全避免这种模式.这里有一个很好的讨论.请将有关Singleton模式的任何评论指向该问题.
我的问题:是否有其他设计模式,应该避免或小心使用?
boolean(bool
)不能为null.和:
bool foo; if(foo){} // Use of unassigned local variable 'foo'
Run Code Online (Sandbox Code Playgroud)
为什么默认值不是假的?那么如果它不是null,它的值是多少?是什么原因?
编辑1 - 默认值确实为false - 但是应该初始化所有变量,为什么?这是另一个问题;)
编辑2 - 与Resharper:private bool foo = false; // Initializing field by default value is redundant
???
我正在使用乳胶中的beamer文档类进行演示.我将有一些备份幻灯片可用于离线观看,参考等.Beamer有一项功能,可以在每张幻灯片上显示演示文稿的进度{page#}/{total pages}.我真的很喜欢它,如果{total pages}相当于我的总页数w/out计数备份幻灯片(我不想在第一页上阻止我的观众!).有谁知道如何做到这一点?
我有理解困难时期 Wait()
,Pulse()
,PulseAll()
.他们都会避免僵局吗?如果您解释如何使用它们,我将不胜感激?
据我所知,.NET中的单个实例有2 GB的限制.我没有太多关注,因为到目前为止我主要使用32位操作系统.在32但它或多或少是一个人为的限制.但是,我很惊讶地发现这个限制也适用于64位.NET.
由于诸如List<T>
使用数组来存储项目之类的集合,这意味着与在64位上运行的相同应用程序相比,在32位上运行的.NET应用程序将能够在列表中保存两倍的引用类型项.这非常令人惊讶.
有谁知道这个限制是否在CLR 4.0中得到解决(目前我手头没有安装4.0).
我知道之前已经问过这个问题,但我正在寻找一种方法:
这是我到目前为止,但我想删除Windows窗体引用.有任何想法吗?
public delegate void SafeInvokeDelegate(System.Action action);
public class SafeInvoke
{
private readonly System.Windows.Forms.Control _threadControl;
public SafeInvoke()
{
_threadControl = new System.Windows.Forms.Control();
}
public void Invoke(System.Action action)
{
if (_threadControl.InvokeRequired)
_threadControl.Invoke(new SafeInvokeDelegate(Invoke), new object[] {action});
else if (action != null) action();
}
}
Run Code Online (Sandbox Code Playgroud)
上面的类可能会这样使用:
SafeInvoke _safeInvoker = new SafeInvoke();
void SafeClearItems()
{
_safeInvoker.Invoke(delegate
{
listView1.Items.Clear();
});
}
Run Code Online (Sandbox Code Playgroud)
我如何删除SafeInvoke类中的System.Windows.Forms.Control但保持相同的功能?