如果我理解正确,.net运行时将始终在我之后清理.因此,如果我创建新对象并停止在我的代码中引用它们,运行时将清理这些对象并释放它们占用的内存.
既然这就是为什么一些对象需要有一个析构函数或dispose方法呢?当它们不再被引用时,运行时不会清理它们吗?
我被同事问过这个问题,我们是否应该在类中包含默认构造函数?如果是这样,为什么?如果不是,为什么不呢?
例
public class Foo {
Foo() { }
Foo(int x, int y) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
我也有兴趣从专家那里了解一下.
目前我正在借用java.math.BigInteger
这里描述的J#库.从来没有使用过库来处理大整数,这看起来很慢,大约慢了10倍,即使对于ulong
长度数也是如此.有没有人有更好的(最好是免费的)库,或者这种性能水平是否正常?
这似乎与这个问题重复,后者询问" SortedList和SortedDictionary之间有什么区别?" 不幸的是,答案只是引用MSDN文档(它清楚地表明两者之间存在性能和内存使用差异),但实际上并没有回答这个问题.
事实上(根据MSDN,这个问题没有得到相同的答案):
的
SortedList<TKey, TValue>
通用类是O(log n)的检索,其中n是字典中的元件的数目的二进制搜索树.在这里,它类似于SortedDictionary<TKey, TValue>
泛型类.这两个类具有相似的对象模型,并且都具有O(log n)检索.两个类别的不同之处在于内存使用和插入和移除速度:
SortedList<TKey, TValue>
使用的内存少于SortedDictionary<TKey, TValue>
.
SortedDictionary<TKey, TValue>
对于未排序的数据,O(log n)具有更快的插入和删除操作,而不是O(n)SortedList<TKey, TValue>
.如果列表是从排序数据中一次性填充的,
SortedList<TKey, TValue>
则速度快于SortedDictionary<TKey, TValue>
.
所以,显然这表明这SortedList<TKey, TValue>
是更好的选择,除非您需要更快的插入和删除未排序数据的操作.
问题仍然存在,鉴于以上信息,使用a的实际(现实世界,商业案例等)原因是SortedDictionary<TKey, TValue>
什么?根据绩效信息,这意味着根本没有必要SortedDictionary<TKey, TValue>
.
随着最近发布的.NET 4.0和Visual Studio 2010,跟踪哪些.NET Framework版本构建在什么版本的CLR上并且属于Visual Studio的哪个版本变得越来越困难.
是否有显示这些关系的权威表格?
VS.net在您创建WCF项目时创建模板.
它为iService1.cs文件添加了一个类:
// Use a data contract as illustrated in the sample below to
// add composite types to service operations.
[DataContract]
public class CompositeType
{
bool boolValue = true;
string stringValue = "Hello ";
[DataMember]
public bool BoolValue
{
get { return boolValue; }
set { boolValue = value; }
}
[DataMember]
public string StringValue
{
get { return stringValue; }
set { stringValue = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
由于WCF服务可以返回任何用户定义的类,为什么要使用DataContract和CompositeType类?
我可以返回类似的东西:
[OperationContract]
MyUserCollection GetUsers();
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
myLocalVar = null;
在离开方法之前,我被"强制"在finally子句中添加语句.原因是帮助GC.有人告诉我,下次服务器崩溃时我会收到短信,所以我最好这样做:-).
我认为这是毫无意义的,因为myLocalVar的范围是方法,并且一旦方法退出就会"丢失".额外的归零只会污染代码,否则无害.
我的问题是,这个关于帮助GC的神话来自哪里?(我被称为"Java记忆书")你知道"权威"的任何文章更深入地解释它吗?有可能这不是一个神话,但真的有所帮助吗?如果是这样,怎么样?可能会使局部变量归零会造成任何伤害?
为了澄清,方法看起来像这样:
void method() {
MyClass myLocalVar = null;
try {
myLocalVar = get reference to object;
... do more here ...
} finally {
if (myLocalVar != null) {
myLocalVar.close(); // it is resource which we should close
}
myLocalVar = null; // THIS IS THE LINE I AM TALKING ABOUT
}
}
Run Code Online (Sandbox Code Playgroud) 我想在我最新的C#应用程序中通过契约尝试一点设计,并希望语法类似于:
public string Foo()
{
set {
Assert.IsNotNull(value);
Assert.IsTrue(value.Contains("bar"));
_foo = value;
}
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以从单元测试框架中获取这样的静态方法,但是我想知道这样的东西是否已经内置于该语言中,或者是否已经存在某种类型的框架.我可以编写自己的Assert函数,只是不想重新发明轮子.
我可能是一个肛门程序员,但我喜欢从远处看起来很好的代码.我发现自己排队了一个CSS样式,而不是这样:
#divPreview {
text-align: center;
vertical-align: middle;
border: #779 1px solid;
overflow: auto;
width: 210px;
height: 128px;
background-color: #fff"
}
Run Code Online (Sandbox Code Playgroud)
它现在看起来像:
#divPreview {
width: 210px;
height: 128px;
overflow: auto;
text-align: center;
vertical-align: middle;
border: #779 1px solid;
background-color: #fff";
}
Run Code Online (Sandbox Code Playgroud)
我几乎总是按照大小的顺序写数字比较
if (0 < n && n < 10)
Run Code Online (Sandbox Code Playgroud)
代替
if (0 < n && 10 > n)
Run Code Online (Sandbox Code Playgroud)
最后我倾向于安排if-then-else代码,以便THEN部分小于ELSE部分(导致较重的东西到底部,对吧?)
if (afflicted == true) {
GetSome();
HelpRight();
}
else {
NowPlease();
}
Run Code Online (Sandbox Code Playgroud)
啊!
if (afflicted == false) {
HowMuchTrouble();
}
else …
Run Code Online (Sandbox Code Playgroud) .net ×5
c# ×5
clr ×2
biginteger ×1
installation ×1
j# ×1
java ×1
largenumber ×1
local ×1
memory ×1
null ×1
sortedlist ×1
variables ×1
versions ×1
wcf ×1