javascript

java

python

c#

android

node.js

reactjs

c++

php

html

jquery

css

.net

ios

git

ruby-on-rails

sql

c

string

ruby

为什么局部变量引用会导致性能大幅下降?

考虑以下简单程序:

using System;
using System.Diagnostics;

class Program
{
   private static void Main(string[] args)
   {
      const int size = 10000000;
      var array = new string[size];

      var str = new string('a', 100);
      var sw = Stopwatch.StartNew();
      for (int i = 0; i < size; i++)
      {
         var str2 = new string('a', 100);
         //array[i] = str2; // This is slow
         array[i] = str; // This is fast
      }
      sw.Stop();
      Console.WriteLine("Took " + sw.ElapsedMilliseconds + "ms.");
   }
}

如果运行此命令,则速度相对较快。 如果我取消注释“慢”行并注释掉“快速”行,则速度要慢5倍以上。 请注意,在两种情况下,它都会在循环内初始化字符串“ str2”。 两种情况都无法优化(可以通过查看IL或拆卸来验证)。

在这两种情况下,代码似乎都在完成相同的工作量。 它需要分配/初始化字符串,然后将引用分配给数组位置。 唯一的区别是该引用是本地变量“ str”还是“ str2”。

为什么将引用分配给“ str”和“ str2”会产生如此大的性能差异?

如果我们看一下反汇编,则有一个区别:

(fast)
     var str2 = new string('a', 100);
0000008e  mov         r8d,64h 
00000094  mov         dx,61h 
00000098  xor         ecx,ecx 
0000009a  call        000000005E393928 
0000009f  mov         qword ptr [rsp+58h],rax 
000000a4  nop

(slow)
     var str2 = new string('a', 100);
00000085  mov         r8d,64h 
0000008b  mov         dx,61h 
0000008f  xor         ecx,ecx 
00000091  call        000000005E383838 
00000096  mov         qword ptr [rsp+58h],rax 
0000009b  mov         rax,qword ptr [rsp+58h] 
000000a0  mov         qword ptr [rsp+38h],rax

“慢速”版本具有两个附加的“移动”操作,其中“快速”版本仅具有“ nop”。

谁能解释这里发生了什么? 很难看到两次额外的mov操作如何导致> 5倍的速度降低,尤其是因为我希望大部分时间都花在字符串初始化上。 感谢您的任何见解。

trans by 2020-01-20T06:39:35Z

本地数据库:如何删除它?

设置:首先将实体框架代码添加到新数据库。

场景:我正在使用EF,并且向数据库中添加了一堆元素。 然后,我更改了实体模型,尽管我知道我可以进行迁移,但我只是想从头开始,基本上是从大地上擦除数据库。

默认情况下使用的数据库是(localdb)\ v11.0。

我的问题是:

我可以去某个地方删除文件,还是启动某种管理器删除该数据库并从头开始?

trans by 2020-01-20T06:07:31Z

如何在XML文档中引用C#关键字?

例如<remarks>不起作用-我收到编译警告:SerializeProperty


感兴趣的人的背景...

/// <summary>Provides base functionality for hand-coded abstractions of API method wrappers, mostly those that abstract over
/// parameters that are required to be JSON-encoded.</summary>
public class FacebookArgs : Dictionary<String, Object>
{
    /// <summary>Initializes an instance of <see cref="FacebookArgs" />.</summary>
    public FacebookArgs() { }

    /// <summary>Intializes an instance of <see cref="FacebookArgs" />, that contains elements copied from <paramref name="dictionary "/>.</summary>
    /// <param name="dictionary"></param>
    public FacebookArgs(IDictionary<String, Object> dictionary)
        : base(dictionary) { }

    /// <summary>Gets or sets the value associated with the specified key.</summary>
    /// <param name="key">The key of the value to get or set.</param>
    /// <returns>The value associated with the specified key.</returns>
    /// <remarks>This implementation hides the base indexer implementation such that specifying a key that does not exist returns null rather than throwing a <see cref="KeyNotFoundException" />.</remarks>
    public new Object this[String key]
    {
        get
        {
            Object value;
            if (this.TryGetValue(key, out value)) return value;
            else return null;
        }
        set { base[key] = value; }
    }

    /// <summary>In derived classes, provides specialized serialization logic for specific properties contained in this object.</summary>
    /// <param name="key">The key of the property to serialize.</param>
    /// <param name="args">A reference to a dictionary of arguments that will be passed directly to a <see cref="FacebookRequest" /> object.</param>
    /// <remarks>
    /// <para>This method allows specialized serialization logic, such as JSON encoding, to be applied to specific properties.</para>
    /// <para>To implement, use a <c>switch</c> (<c>Select</c> in VB.NET) statement to filter based on <paramref name="key" /> and provide the property-specific logic.
    /// The resulting value should then be added to <paramref name="args" /> using the same <paramref name="key "/>.
    /// </para>
    /// <para>Properties that do not require additional processing (strings, integral values, etc) should be ignored.</para>
    /// </remarks>
    protected virtual void SerializeProperty(String key, ref IDictionary<String, Object> args) { }

    /// <summary>Returns a dictionary of key/value pairs suitable to be passed a <see cref="FacebookRequest" /> object.</summary>
    /// <returns>A dictionary of key/value pairs suitable to be passed a <see cref="FacebookRequest" /> object.</returns>
    /// <remarks>This method calls the <see cref="SerializeProperty" /> for each key in the object, which allows property-specific processing
    /// to be done on any property.</remarks>
    /// <seealso cref="SerializeProperty" />
    public IDictionary<String, Object> GetArgs()
    {
        IDictionary<String, Object> args = new Dictionary<String, Object>();

        foreach (String key in this.Keys)
        {
            this.SerializeProperty(key, ref args);

            if (!args.ContainsKey(key) && this[key] != null)
            {
                args.Add(key, this[key]);
            }
        }

        return args;
    }
}

可以在SerializeProperty<remarks>标签中找到有问题的标签。 我还计划提供一些<example>,但我还没有解决。

trans by 2020-01-20T05:46:43Z

C#-名称库的XML文档

您会为名称空间编写xml-doc吗? 如果是,如何以及在哪里?

我认为,如果可能的话,可能是一个几乎为空的文件,如下所示:

/// <summary>
/// This namespace contains stuff
/// </summary>
namespace Some.Namespace
{

}

但这行得通吗? 既然您...“声明”,或者至少也要在所有其他文件中使用该名称空间...而如果您在同一名称空间的其他位置写了xml文档的内容,会发生什么呢? 一个人走了吗? 还是会以某种方式合并?

trans by 2020-01-20T05:15:19Z

YYYYMMDD字符串日期转换为日期时间值

可能重复:
在C#中将字符串转换为DateTime

一个问题

我得到的字符串值实际上是从directoryInfo获得的。我想要完成的是将字符串值转换为日期值以进行比较。

文件夹名称是这样的示例:C:\ FOLD \ 20111120正确的另一个文件夹路径是这样的C:\ FOLD \ 20111021

20111120实际上是一种日期格式。 我正在尝试将其转换为日期格式,以进行比较以决定是否删除整个目录。

我想我将在这里粘贴我的代码

DirectoryInfo dir = new DirectoryInfo(_FolderPath);

foreach (DirectoryInfo f in dir.GetDirectories())
{
     String folderName = f.ToString();
     DateTime ConDt = Convert.ToDateTime(folderName);
     Console.WriteLine(ConDt);
     Console.WriteLine(ConDt.GetType());
   //Console.WriteLine(folderName.GetType());
   //Console.WriteLine(f.GetType());
}

我尝试使用Convert.toDatetime()并收到无法进行对话的错误。我该怎么办?

trans by 2020-01-20T03:33:20Z

C#-HttpClient-任务已取消-如何获取确切的错误消息?

我有以下测试代码。 在循环316934或361992次之后,我总是收到“任务已取消”错误。

如果我没看错,则有两个可能的原因导致任务被取消:a)HttpClient超时或b)队列中的任务过多,而某些任务超时。

我找不到有关排队任务限制的文档。 我尝试创建超过500K的任务,并且没有超时。 我想原因“ b”可能不正确。

Q1。 还有其他原因我错过了吗?

Q2。 如果是由于HttpClient超时,如何获取确切的异常消息而不是“ TaskCancellation”异常。

Q3。 修复它的最佳方法是什么? 我应该介绍节流阀吗?

谢谢!

var _httpClient = new HttpClient();
_httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Accept", "text/html,application/xhtml+xml,application/xml");
_httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Accept-Encoding", "gzip, deflate");
_httpClient.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0");
_httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Accept-Charset", "ISO-8859-1");

int[] intArray = Enumerable.Range(0, 600000).ToArray();

var results = intArray                
    .Select(async t => {

        using (HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Get, "http://www.google.com")) {
            log.Info(t);

            try {

                var response = await _httpClient.SendAsync(requestMessage);
                var responseContent = await response.Content.ReadAsStringAsync();

                return responseContent;
            }
            catch (Exception ex) {
                log.ErrorException(string.Format("SoeHtike {0}", Task.CurrentId), ex);
            }
            return null;
        }
    });

Task.WaitAll(results.ToArray());

Console.ReadLine();

这是复制问题的步骤。

  1. 在VS 2012中创建控制台项目。

  2. 请复制我的代码并将其粘贴到Main中。

  3. 将断点放在此行“ log.ErrorException(string.Format(” SoeHtike{0}”,Task.CurrentId),例如);”

在调试模式下运行该程序。 等待几分钟。 (也许是5分钟?)我刚刚测试了我的代码,但3分钟后我得到了异常。 如果您有提琴手,则可以监视请求,以便知道程序是否仍在运行。

如果您无法复制此问题,请随时告诉我。

trans by 2020-01-20T02:59:44Z

在C#中使用.jar Java库API?

我是入门级程序员,所以请在您的回复中加以描述。

我正在尝试使用C#.net应用程序中以.jar文件形式给出的Java API。 我不太了解Java,但是当我尝试运行它时,此.jar文件说“没有主类清单属性”,因此这意味着它是一个库? 该Java API还带有一个.java文件,该文件显示了如何使用该库,但我看不到.jar内的代码。

我在此站点上发现了这个问题,答案之一是:“以简单的方式,您可以将Java类打包到jar文件中,然后在C#中使用Process类执行和映射IO流。” 我对C#中的Process类不熟悉,但是我不明白如何在C#.net项目中使用它来使用Java库。

这可能吗? 还是那个答案不正确?

如果是这样,您能否解释一下如何在我的C#应用程序中使用.jar库。

trans by 2020-01-20T02:13:36Z

c#-更新实体框架模型后,Visual Studio无法看到更改

如果我对EF 5.0模型进行了任何更改,VS似乎看不到这些更改。 我尝试添加一个新表,该表在模型中显示得很好,但是如果我尝试在某个地方使用它,该表就不会在智能感知中显示,并且我将无法使用它。

我也尝试过更改列的数据类型,如果我查看.edmx模型文件,它再次显示很好,但是Visual Studio仍会在该字段上给我编译器错误,因为我正在尝试分配不正确的数据类型。

如果我完全删除了EDMX,然后重新创建,则所做的更改正常。 但是每次我应该能够“从数据库更新模型”并重新构建时,从数据库重新生成都是很累的。

我以前从未遇到过EF这些问题。 有谁知道原因或解决此问题的方法?

谢谢。

trans by 2020-01-19T19:57:52Z

c#-MVC Razor单选按钮

在局部视图我使用这样的文本框。

@model Dictionary<string, string>
@Html.TextBox("XYZ", @Model["XYZ"])

我如何生成单选按钮,并在表单集合中获得所需的值为YES / NO True / False)? 当前,如果我为以下内容选择任何值,则“ ABC”的值为空。

   <label>@Html.RadioButton("ABC", @Model["ABC"])Yes</label>
   <label>@Html.RadioButton("ABC", @Model["ABC"])No</label>

控制者

        public int Create(int Id, Dictionary<string, string> formValues)
        {
         //Something Something
        }
trans by 2020-01-19T19:52:30Z

c#-在.NET C中以字符串形式返回视图

我找到了一些文章,介绍如何在ASP.NET中将视图返回到字符串,但是无法隐蔽任何内容以使其能够在.NET Core中运行

public static string RenderViewToString(this Controller controller, string viewName, object model)
{
    var context = controller.ControllerContext;
    if (string.IsNullOrEmpty(viewName))
        viewName = context.RouteData.GetRequiredString("action");

    var viewData = new ViewDataDictionary(model);

    using (var sw = new StringWriter())
    {
        var viewResult = ViewEngines.Engines.FindPartialView(context, viewName);
        var viewContext = new ViewContext(context, viewResult.View, viewData, new TempDataDictionary(), sw);
        viewResult.View.Render(viewContext, sw);

        return sw.GetStringBuilder().ToString();
    }
}

假定能够使用以下命令从Controller调用:

var strView = this.RenderViewToString("YourViewName", yourModel);

当我尝试将以上内容运行到.NET Core中时,出现很多编译错误。

我尝试将其转换为可与.NET Core一起使用,但失败了,有人能帮忙提及需要在project.json中使用的string和所需的"dependencies": { "Microsoft.AspNetCore.Mvc": "1.1.0", ... },

其他一些示例代码在此处,此处和此处

注意我需要一种解决方案,以将视图转换为.NET Core中的string,无论转换了相同的代码还是采用其他方式也可以。

trans by 2020-01-19T19:46:14Z

我如何迭代IGrouping <T>接口?

我遇到了一个非常烦人的问题,我对一组数据进行了分组,但无法访问该组中的数据。 我可以找到关键而不是数据。

我有以下形式的数据负载

Data.Period = x
Data.Adjustment = y

我执行GroupBy

var groupedData = Data.GroupBy(x => x.Period new {x.Period});

(根据linq)这带回了我的分层数据,这些数据开始看起来像我想要的样子。 我想遍历内容,但是不能...我该怎么做? 以及我该如何...

工作如何不使用投影就可以到达Data.Adjustment。 而且我还不想投影,因为我必须执行另一次分组....帮助! :-)

trans by 2020-01-19T18:29:06Z

c#-“此程序集由比当前加载的运行时新的运行时构建,无法加载”

我收到错误消息:“此程序集是由比当前加载的运行时新的运行时构建的,无法加载。”

我有一个.NET 2.0项目正在调用的.NET 4.0 dll项目。 有没有办法调和框架的差异?

trans by 2020-01-19T18:07:56Z

c#-如何获取IP地址?

我想获取在我网站上注册的任何人的IP地址。 如何在ASPNET中执行此操作。 我使用了以下代码,但是没有获得正确的IP地址

string ipaddress = Request.UserHostAddress;
trans by 2020-01-19T16:03:27Z

C#-在.NET C中的MVC之外使用Razor

我想将Razor用作我在.NET Core中编写的.NET控制台应用程序中的模板引擎。

我遇到的独立Razor引擎(RazorEngine,RazorTemplates)都需要完整的.NET。 我正在寻找一种适用于.NET Core的解决方案。

trans by 2020-01-19T13:12:19Z

从另一个减去通用列表

我正在尝试从另一个列表中删除FirmID列表。我不太了解linq,但是我很确定我需要使用它。

List<Firm> firms = GetBusinessDevelopmentFirms(database);
List<Firm> trackedFirms = GetAllCLIFirmsBeingTrackedByUser();

var result = firms.Contains(i => trackedFirms.Contains(i.FirmID));

最后一行不起作用,即使我已经输入“ using System.Linq;”,系统也会显示“ Unknown method Contains(?)”。 在全班最高。

我的想法是从所有公司列表中删除一个被跟踪公司列表,以查找未跟踪公司。

我希望这是有道理的。

trans by 2020-01-19T08:45:41Z

在C#中比较两个图像的算法

我正在C#中编写一个工具来查找重复的图像。 目前,我创建文件的MD5校验和并进行比较。

不幸的是我的照片可以

  • 旋转90度
  • 具有不同的尺寸(具有相同内容的较小图像)
  • 具有不同的压缩或文件类型(例如jpeg工件,请参见下文)

enter image description hereenter image description here

解决这个问题的最佳方法是什么?

trans by 2020-01-19T07:38:59Z

c#-菜单,工具栏,StackPanel等中的垂直分隔符控件-有可能吗?

我想以垂直方式使用Separator控件(比如说在水平StackPanel中使用)。

我四处搜索发现了这种方法,但是它没有使用Separator控件,而是使用了边框和矩形。[https://social.msdn.microsoft.com/forums/zh-CN/wpf/thread/eab865be-ad9b-45ed-b9d8-fc93f737b163]

可以垂直使用分隔符控件吗?

trans by 2020-01-19T04:39:17Z

CodeGo.net>如何将字符串明确转换为securestring

我希望将在文本框中输入的文本转换为c#中的securestring。

trans by 2020-01-19T00:26:57Z

毫秒转换为人类可读的时间圈

我想以人类可读的格式来格式化一些命令的执行时间,例如:

3 -> 3ms
1100 -> 1s 100ms
62000 -> 1m 2s
etc ..

考虑到天,小时,分钟,秒...

是否可以使用C#

trans by 2020-01-19T00:21:42Z

c#-Winform形式tex中的版本号

如何将程序集版本号(设置为自动递增)插入Winform表单文本?

trans by 2020-01-18T23:44:28Z

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 下一页 共273页