javascript

java

python

c#

android

node.js

c++

reactjs

php

html

jquery

css

.net

ios

git

ruby-on-rails

sql

c

string

ruby

C#-未使用的“使用”声明的开销?

我刚刚安装了resharper,这让我知道了我在每个类中实际上没有使用的名称空间。

这就引出我一个问题-使用声明将这些未使用的未使用的东西实际上有任何开销吗?

这仅仅是紧密代码的问题,还是在我不需要时调用这些名称空间时性能受到影响?

trans by 2020-02-17T10:55:40Z

c#-using(){}块中的yield return语句在执行之前进行处置

我已经编写了自己的自定义数据层以保留到特定文件,并使用自定义DataContext模式对其进行了抽象。

这全部基于.NET 2.0框架(对目标服务器有限制),因此即使其中一些看起来像LINQ-to-SQL,但事实并非如此! 我刚刚实现了类似的数据模式。

请参阅以下示例,以了解我无法解释的情况。

要获取Animal的所有实例,我可以这样做,并且效果很好

public static IEnumerable<Animal> GetAllAnimals() {
        AnimalDataContext dataContext = new AnimalDataContext();
            return dataContext.GetAllAnimals();
}

以及下面的AnimalDataContext()中的GetAllAnimals()方法的实现

public IEnumerable<Animal> GetAllAnimals() {
        foreach (var animalName in AnimalXmlReader.GetNames())
        {
            yield return GetAnimal(animalName);
        }
}

AnimalDataContext()实现IDisposable,因为我在那里有一个XmlTextReader,我想确保它能快速清理。

现在,如果我将第一个调用包装在using语句中,如下所示

public static IEnumerable<Animal> GetAllAnimals() {
        using(AnimalDataContext dataContext = new AnimalDataContext()) {
            return dataContext.GetAllAnimals();
        }
}

并在AnimalDataContext.GetAllAnimals()方法的第一行放置一个断点,并在AnimalDataContext.Dispose()方法的第一行放置另一个断点,然后执行...

Dispose()方法被称为FIRST,因此AnimalXmlReader.GetNames()给出“对象引用未设置为对象实例”的异常,因为在Dispose()中将AnimalXmlReader设置为null。

有任何想法吗? 我有一种预感,不允许在try-catch块中调用与收益率相关的收益,该收益在编译后使用有效表示...

trans by 2020-02-14T09:40:43Z

CodeGo.net>使用语句与IDisposable.Dispose()

据我了解,一旦代码退出代码块,.NET中的Dispose()语句就会调用Dispose()对象的using方法。

Dispose()语句是否还有其他作用? 如果没有,似乎以下两个代码示例可以实现完全相同的效果:

Using Con as New Connection()
    Con.Open()
    'do whatever '
End Using

Dim Con as New Connection()
Con.Open()
'do whatever '
Con.Dispose()

无论确认我是对的人还是指出我错了并解释原因的人,我都会给最好的答案。 请记住,我知道某些类在其Dispose()方法中可以做不同的事情。 这个问题是关于using语句是否达到与调用对象的Dispose()方法完全相同的结果。

trans by 2020-02-10T09:20:44Z

为什么我应该使用“ using”关键字来访问我的基类方法?

我编写了以下代码,以解释我的问题。 如果我注释第11行(使用关键字“ using”),则编译器不会编译该文件,并显示以下错误:invalid conversion from 'char' to 'const char*'。在Son类中似乎看不到Parent类的方法void action(char)

为什么编译器以这种方式运行? 还是我做错了什么?

class Parent
{
    public:
        virtual void action( const char how ){ this->action( &how ); }
        virtual void action( const char * how ) = 0;
};

class Son : public Parent
{
    public:
        using Parent::action; // Why should i write this line?
        void action( const char * how ){ printf( "Action: %c\n", *how ); }
};

int main( int argc, char** argv )
{
    Son s = Son();
    s.action( 'a' );
    return 0;
}
trans by 2019-10-05T13:13:34Z

c# - 性能如何受未使用的using指令的影响?

每当您创建新页面或项目时,Visual Studio都会自动为您创建使用语句。 其中一些你永远不会使用。

Visual Studio具有以下功能:#34;删除未使用的使用&#34;。

我想知道如果从未访问过的using语句仍然在文件的顶部提到,是否对程序性能有任何负面影响。

trans by 2019-08-19T07:35:46Z

c# - 如何使用C#6“使用静态”功能?

我正在看一下C#6中的几个新功能,具体来说,“使用静态”。

using static是一种新的using子句,它允许您将类型的静态成员直接导入范围。
(博客文章的底部)

根据我发现的几个教程,这个想法如下,
代替:

using System;

class Program 
{ 
    static void Main() 
    { 
        Console.WriteLine("Hello world!"); 
        Console.WriteLine("Another message"); 
    } 
}

您可以使用静态类的新C#6功能省略重复的using namespace语句:

using System.Console;
//           ^ `.Console` added.
class Program 
{ 
    static void Main() 
    { 
        WriteLine("Hello world!"); 
        WriteLine("Another message"); 
    } // ^ `Console.` removed.
}

但是,这似乎对我没有用。 我在using namespace声明中收到错误,说:

“''using namespace'指令只能应用于命名空间;'Console'是一种类型而不是命名空间。请考虑使用'using static'指令”

我正在使用visual studio 2015,我将构建语言版本设置为“C#6.0”

是什么赋予了? msdn博客的例子不正确吗? 为什么这不起作用?


该博客文章现已更新,以反映最新的更新,但这是一个截图,以防博客发生故障:

blog

trans by 2019-07-15T19:09:17Z

c# - 可以“使用”多个资源导致资源泄漏吗?

C#允许我执行以下操作(来自MSDN的示例):

using (Font font3 = new Font("Arial", 10.0f),
            font4 = new Font("Arial", 10.0f))
{
    // Use font3 and font4.
}

如果using(... , ...)抛出怎么办? 从我的理解,font3将泄漏资源,不会被处置。

  • 这是真的? (font4不会被处理掉)
  • 这是否意味着应该完全避免使用嵌套使用using(... , ...)
trans by 2019-07-13T01:20:15Z

c# - 在处理之前我是否必须关闭()SQLConnection?

根据我在这里关于Disposable对象的另一个问题,我们应该在using块结束之前调用Close()吗?

using (SqlConnection connection = new SqlConnection())
using (SqlCommand command = new SqlCommand())
{
    command.CommandText = "INSERT INTO YourMom (Amount) VALUES (1)";
    command.CommandType = System.Data.CommandType.Text;

    connection.Open();
    command.ExecuteNonQuery();

    // Is this call necessary?
    connection.Close();
}
trans by 2019-07-12T09:44:12Z

.net - 为什么在C#中删除未使用的using指令?

我想知道为什么开发人员使用&#34;删除未使用的Usings&#34; Visual Studio 2008中的功能?

trans by 2019-07-03T21:27:55Z

c# - 从using()语句中返回是否有任何副作用?

从获取DataContext的using语句中返回一个方法值似乎总能正常工作,如下所示:

public static Transaction GetMostRecentTransaction(int singleId)
{
    using (var db = new DataClasses1DataContext())
    {
        var transaction = (from t in db.Transactions
                              orderby t.WhenCreated descending
                              where t.Id == singleId
                              select t).SingleOrDefault();
        return transaction;
    }
}

但在我突破使用括号之前,我总觉得我应该关闭一些东西,例如: 通过在using语句之前定义事务,在括号内获取它的值,然后在括号后面返回。

将变量定义并返回到使用括号之外是更好的做法还是以任何方式保存资源?

trans by 2019-07-02T03:16:15Z

.net - 我什么时候应该在C#中使用“使用”块?

这个问题在这里已有答案:

  • 在C#中“使用”有什么用处                                     29个答案

是否存在我应该(或不应该?)使用“使用”块的特定情况:

using(SomeType t = new SomeType()){
    ...
}
trans by 2019-06-24T03:54:47Z

c# - 在“using”块中是SqlConnection在返回或异常时关闭?

第一个问题:
说我有

using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();

    string storedProc = "GetData";
    SqlCommand command = new SqlCommand(storedProc, connection);
    command.CommandType = CommandType.StoredProcedure;
    command.Parameters.Add(new SqlParameter("@EmployeeID", employeeID));

    return (byte[])command.ExecuteScalar();
}

连接是否关闭? 因为在技术上我们永远不会到达最后的using作为我们之前的Dispose()

第二个问题:
这次我有:

try
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        int employeeID = findEmployeeID();

        connection.Open();
        SqlCommand command = new SqlCommand("UpdateEmployeeTable", connection);
        command.CommandType = CommandType.StoredProcedure;
        command.Parameters.Add(new SqlParameter("@EmployeeID", employeeID));
        command.CommandTimeout = 5;

        command.ExecuteNonQuery();
    }
}
catch (Exception) { /*Handle error*/ }

现在,在using的某个地方说我们得到一个错误并且它被抓住了。 连接是否仍然关闭? 因为我们再次跳过Dispose()中的其余代码并直接转到using语句。

我是如何思考using的工作方式? 即当我们离开using范围时,是否只是调用Dispose()

trans by 2019-06-01T12:37:46Z

c# - 使用{}语句调用return是一个好方法吗?

我只是想知道在return区块内调用dispose()这是安全/好的方法。

对于前者

using(var scope = new TransactionScope())
{
  // my core logic
  return true; // if condition met else
  return false;
  scope.Complete();
}

我们知道在最后一个最大括号dispose()将被取消。 但是在上述情况下会是什么,因为return将控件跳出给定范围(AFAIK)......

  1. 我的dispose()被叫了吗?
  2. 因此对于示波器的dispose()方法。
trans by 2019-05-22T21:31:04Z

c# - 使用带有null obj的语句

在(可能)null对象上使用using语句是否安全?
请考虑以下示例:

class Test {
    IDisposable GetObject(string name) {
        // returns null if not found
    }

    void DoSomething() {
        using (IDisposable x = GetObject("invalid name")) {
            if (x != null) {
                 // etc...
            }
        }
    }
}

是否保证仅当对象不为空时才会调用Dispose,并且我不会得到NullReferenceException

trans by 2019-05-10T13:30:11Z

我应该Dispose()DataSet和DataTable吗?

DataSet和DataTable都实现了IDisposable,因此,通过传统的最佳实践,我应该调用它们的Dispose()方法。

但是,从我到目前为止所读到的,DataSet和DataTable实际上并没有任何非托管资源,因此Dispose()实际上并没有做太多。

另外,我不能只使用using,因为DataSet有一组DataTables。

所以,为了安全起见,我需要遍历myDataSet.Tables,处理每个DataTable,然后处理DataSet。

那么,在我的所有DataSet和DataTables上调用Dispose()是否值得麻烦?

附录:

对于那些认为应该处理DataSet的人:通常,处理模式是使用usingtry..finally,因为您要保证将调用Dispose()。

然而,这对于一个集合来说真的很快。 例如,如果对Dispose()的一个调用抛出异常,你会怎么做? 你吞下它(这是“坏”),以便你可以继续处理下一个元素?

或者,你是否建议我只调用myDataSet.Dispose(),而忘记在myDataSet.Tables中处理DataTables?

trans by 2019-03-18T13:58:20Z

加入 - MySQL ON vs USING?

在MySQL JOIN中,有什么区别ONUSING()? 据我所知,USING()只是更方便的语法,而ON允许在列名不相同时更灵活。 然而,这种差异是如此微小,你会认为他们只是取消了USING()

除此之外还有更多的东西吗? 如果是,我应该在特定情况下使用哪个?

trans by 2019-03-15T21:37:57Z

程序集 - 为什么要删除不必要的C#using指令?

例如,我很少需要:

using System.Text;

但它默认始终存在。 我假设如果您的代码包含不必要的using指令,应用程序将使用更多内存。 但还有什么我应该知道的吗?

另外,如果只在一个文件和大多数/所有文件中使用相同的using指令,它会有什么不同吗?


编辑:请注意,这个问题与被称为using语句的无关概念无关,旨在通过确保当对象超出范围时调用其IDisposable.Dispose方法来帮助管理资源。 请参阅C#中“使用”的使用。

trans by 2019-03-15T13:48:36Z

.net - 什么是C#Using block,我为什么要使用它?

这个问题在这里已有答案:

  • 在C#中“使用”有什么用处                                     29个答案

在C#中使用块的目的是什么? 它与局部变量有什么不同?

trans by 2019-03-01T09:33:57Z

.net - 在C#中使用语句嵌套

我正在做一个项目。 我必须比较两个文件的内容,看看它们是否精确匹配。

在进行大量错误检查和验证之前,我的初稿是:

  DirectoryInfo di = new DirectoryInfo(Environment.CurrentDirectory + "\\TestArea\\");
  FileInfo[] files = di.GetFiles(filename + ".*");

  FileInfo outputFile = files.Where(f => f.Extension == ".out").Single<FileInfo>();
  FileInfo expectedFile = files.Where(f => f.Extension == ".exp").Single <FileInfo>();

  using (StreamReader outFile = new StreamReader(outputFile.OpenRead()))
  {
    using (StreamReader expFile = new StreamReader(expectedFile.OpenRead()))
    {
      while (!(outFile.EndOfStream || expFile.EndOfStream))
      {
        if (outFile.ReadLine() != expFile.ReadLine())
        {
          return false;
        }
      }
      return (outFile.EndOfStream && expFile.EndOfStream);
    }
  }

嵌套using语句似乎有点奇怪。

有一个更好的方法吗?

trans by 2019-02-19T02:19:01Z

c# - 必须处理HttpClient和HttpClientHandler吗?

.NET Framework 4.5中的System.Net.Http.HttpClient和System.Net.Http.HttpClientHandler实现了IDisposable(通过System.Net.Http.HttpMessageInvoker)。

Dispose()声明文档说:

通常,当您使用IDisposable对象时,您应该声明和   在using语句中实例化它。

这个答案使用了这种模式:

var baseAddress = new Uri("http://example.com");
var cookieContainer = new CookieContainer();
using (var handler = new HttpClientHandler() { CookieContainer = cookieContainer })
using (var client = new HttpClient(handler) { BaseAddress = baseAddress })
{
    var content = new FormUrlEncodedContent(new[]
    {
        new KeyValuePair<string, string>("foo", "bar"),
        new KeyValuePair<string, string>("baz", "bazinga"),
    });
    cookieContainer.Add(baseAddress, new Cookie("CookieName", "cookie_value"));
    var result = client.PostAsync("/test", content).Result;
    result.EnsureSuccessStatusCode();
}

但是微软最明显的例子并没有明确地或隐含地调用Dispose()。 例如:

  • 最初的博客文章宣布了HttpClient的发布。
  • HttpClient的实际MSDN文档。
  • BingTranslateSample
  • GoogleMapsSample
  • WorldBankSample

在公告的评论中,有人问微软员工:

检查你的样品后,我看到你没有进行处理   对HttpClient实例的操作。 我已经使用了HttpClient的所有实例   在我的应用程序上使用声明,我认为这是正确的方式   因为HttpClient实现了IDisposable接口。 我是谁   正确的道路?

他的回答是:

一般来说,这是正确的,但你必须要小心   “使用”和异步,因为他们不真正混合.Net 4,在.Net 4.5你   可以在“using”语句中使用“await”。

顺便说一下,你可以重复使用相同的HttpClient,因为你喜欢这么多次   通常你不会一直创建/处置它们。

第二段对于这个问题是多余的,它不关心你可以使用HttpClient实例多少次,而是关注是否有必要在你不再需要它之后处理它。

(更新:事实上,第二段是答案的关键,如下面的@DPeden所示。)

所以我的问题是:

  1. 鉴于当前的实现(.NET Framework 4.5),是否有必要在HttpClient和HttpClientHandler实例上调用Dispose()? 澄清:“必要”是指如果不处置会产生任何负面影响,例如资源泄漏或数据腐败风险。

  2. 如果没有必要,那么它是否是一个“好的做法”,因为它们实现了IDisposable?

  3. 如果有必要(或推荐),上面提到的代码是否安全地实现了它(对于.NET Framework 4.5)?

  4. 如果这些类不需要调用Dispose(),为什么它们被实现为IDisposable?

  5. 如果他们需要,或者如果是推荐的做法,微软的例子是误导性的还是不安全的?

trans by 2019-02-16T23:29:15Z

1 2 下一页 共2页