有人可以根据性能,内存使用,编码的简易性,正确的事情等因素,在使用语句中包含DataContext或在LINQ-SQL中包含Data/Text之间的优缺点.
更新:在一个特定的应用程序中,我经历过,没有将DataContext包装在使用块中,随着活动对象未针对GC发布,内存使用量不断增加.在下面的示例中,如果我持有对q的列表和q的访问实体的引用,我创建了一个未针对GC发布的对象图.
使用DataContext
using (DBDataContext db = new DBDataContext())
{
var q =
from x in db.Tables
where x.Id == someId
select x;
return q.toList();
}
Run Code Online (Sandbox Code Playgroud)
DataContext没有使用和保持活着
DBDataContext db = new DBDataContext()
var q =
from x in db.Tables
where x.Id == someId
select x;
return q.toList();
Run Code Online (Sandbox Code Playgroud)
谢谢.
我可能已经知道这个问题的答案,但我认为无论如何都值得问.如果using我的代码文件中有大量未使用的语句;
谢谢
Jon Skeet 在我的SOApiDotNet代码(用于pre-alpha Stack Overflow API的.NET库)上发表评论(通过推特):
@ maximz2005我注意到的一件事就是快速浏览源代码:你没有处理(原文如此)WebResponses.FTW"使用"声明.
他表示我需要将这些Web会话包装在"using"语句中.但是,我有一个问题:我应该包装整个事情,从HttpWebRequest开始,还是应该在"using"语句之外创建WebRequest然后将Response包装在里面?我感觉不同的是,在前者中,两个物体都会被处理掉 - 这是正确的吗?
提前致谢.
我的应用程序中有以下代码:
using (var database = new Database()) {
var poll = // Some database query code.
foreach (Question question in poll.Questions) {
foreach (Answer answer in question.Answers) {
database.Remove(answer);
}
// This is a sample line that simulate an error.
throw new Exception("deu pau");
database.Remove(question);
}
database.Remove(poll);
}
Run Code Online (Sandbox Code Playgroud)
此代码像往常一样触发Database类Dispose()方法,并且此方法自动将事务提交到数据库,但这会使我的数据库处于不一致状态,因为答案将被删除,但问题和轮询不会.
我可以在Dispose()方法中检测到它因为异常而不是关闭块的常规结束而被调用,所以我可以自动执行回滚吗?
我不想手动添加try ... catch块,我的目标是使用using块作为逻辑安全事务管理器,因此如果执行是干净的则提交到数据库,如果发生任何异常则提交回滚.
你有什么想法吗?
我有一个继承struct A : public B,我想隐藏B的个别功能,这可能吗?
我知道using BMethod在A声明中可以使用相反的方法.
干杯
我有一个关于延期执行和数据处理的问题.
请考虑以下示例:
private IEnumerable<string> ParseFile(string fileName)
{
using(StreamReader sr = new StreamReader(fileName))
{
string line;
while((line = sr.ReadLine()) != null)
{
yield return line;
}
}
}
private void LineReader(string fileName)
{
int counter = 0;
foreach(string line in ParseFile(fileName))
{
if(counter == 2)
{
break; // will this cause a dispose on the StreamReader?
} else
{
Console.WriteLine(line);
counter++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
请问break声明立即引起读者ParseFile处置,或者它仍然在上下文中考虑,并锁定该文件打开,直到程序本身被关闭?
我更喜欢以下
using Truncating.Long.Using.Namespace.Xxx;
Run Code Online (Sandbox Code Playgroud)
Visual Studio 2015,执行以下操作
using Xxx;
Run Code Online (Sandbox Code Playgroud)
我想通过调整" 代码分析 "设置可以改变代码提示(IDE0001)的行为.
但我无法弄清楚如何停止行为,对于Ctrl-.插入缺少的命名空间.
有没有人对此有一些指示或反馈?
在C#中,如果我想确定性地清理非托管资源,我可以使用"using"关键字.但是对于多个依赖对象,这最终会进一步嵌套:
using (FileStream fs = new FileStream("c:\file.txt", FileMode.Open))
{
using (BufferedStream bs = new BufferedStream(fs))
{
using (StreamReader sr = new StreamReader(bs))
{
// use sr, and have everything cleaned up when done.
}
}
}
Run Code Online (Sandbox Code Playgroud)
在C++中,我习惯于使用析构函数来执行此操作:
{
FileStream fs("c:\file.txt", FileMode.Open);
BufferedStream bs(fs);
StreamReader sr(bs);
// use sr, and have everything cleaned up when done.
}
Run Code Online (Sandbox Code Playgroud)
在C#中有更好的方法吗?还是我坚持多层次的嵌套?
这是问题所在,您包含多个程序集并在代码文件的顶部添加"using namespaceX".
现在您要创建一个类或使用在多个名称空间中定义的符号,例如System.Windows.Controls.Image&System.Drawing.Image
现在,除非您使用完全限定名称,否则由于模糊不清会导致婴儿床/构建错误,尽管顶部有正确的"使用"声明.这是什么方式?
(另一个知识基础帖子......我在搜索大约10分钟后找到答案,因为我不知道正确的搜索关键字)
我们为Visual Studio 2008提供了Power Commands,它为项目/解决方案中的所有文件添加了删除未使用的使用和排序的使用的上下文菜单命令.
如何在VS2010中执行相同操作,因为此插件不兼容?
using ×10
c# ×6
c++ ×2
namespaces ×2
.net ×1
datacontext ×1
file-io ×1
inheritance ×1
linq ×1
linq-to-sql ×1
optimization ×1
plugins ×1
raii ×1