小编Teu*_*n D的帖子

lambda表达式中的枚举编译方式不同; 重载分辨率提高的结果?

在尝试Visual Studio 2015 RC时,我收到了以前正在运行的代码的运行时错误.给定(x => x.CustomerStatusID == CustomerStatuses.Active)作为a传递给函数的lambda Expression<>,调试器在表达式树中显示差异.以前编译为:

.Lambda #Lambda1<System.Func`2[Services.DataClasses.CustomerDC,System.Boolean]>(Services.DataClasses.CustomerDC $x)
{
    (System.Int32)$x.CustomerStatusID == 0
}
Run Code Online (Sandbox Code Playgroud)

但是在C#6.0中它现在编译为

.Lambda #Lambda1<System.Func`2[Services.DataClasses.CustomerDC,System.Boolean]>(Services.DataClasses.CustomerDC $x)
{
    (System.Int32)$x.CustomerStatusID == (System.Int32).Constant<Services.DataClasses.CustomerStatuses>(Active)
}
Run Code Online (Sandbox Code Playgroud)

虽然我的树遍历代码的修复是直截了当的,并且额外的细节是值得赞赏的,有没有人知道任何其他陷阱漂浮这样?

或者,是否有人链接到有关如何改进重载决策的细节的信息?我找不到任何东西.

c# lambda enums roslyn c#-6.0

68
推荐指数
1
解决办法
1954
查看次数

为什么DateTime.MinValue不能在UTC之前的时区中序列化?

我遇到了WCF REST服务的问题.我尝试返回的wire对象具有未设置的某些属性,导致DateTime.MinValue为DateTime类型的属性.该服务返回一个空文档(HTTP状态为200 ???).当我尝试自己调用JSON序列化时,抛出的异常是:

SerializationException:转换为UTC时,大于DateTime.MaxValue或小于DateTime.MinValue的DateTime值无法序列化为JSON.

这可以通过在控制台应用程序中运行以下代码来重现:

DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(DateTime));
MemoryStream m = new MemoryStream();
DateTime dt = DateTime.MinValue;

// throws SerializationException in my timezone
ser.WriteObject(m, dt);
string json = Encoding.ASCII.GetString(m.GetBuffer());
Console.WriteLine(json);
Run Code Online (Sandbox Code Playgroud)

为什么会这样?我认为这与我的时区(GMT + 1)有关.由于DateTime.MinValue是默认值(DateTime),我希望这可以没有问题地序列化.

有关如何使我的REST服务行为的任何提示?我不想改变我的DataContract.

c# wcf serialization datetime json

51
推荐指数
4
解决办法
3万
查看次数

如何在WPF数据网格上自动滚动

我觉得我很蠢.我现在搜索了15分钟,发现了几种不同的数据网格滚动解决方案,但似乎没有一个对我有用.

我正在使用WPF与.NET 3.5和WPF Toolkit DataGrid.当我的可观察集合发生变化时,我的网格会更新,完美运行.现在,我的DataGrid位于普通网格内,如果DataGrid太大,则会出现滚动条.还好......

现在来了1.000.000美元的问题:

如何让datagrid滚动到最后一行?有:

  • 没有AutoScroll属性
  • 没有CurrentRowSelected索引
  • 一个CurrentCell,但没有我可以用于CurrentCell = AllCells.Last的Collection

有任何想法吗?我觉得自己真的很蠢,这个问题太难了似乎很奇怪.我错过了什么?

c# wpf datagrid

35
推荐指数
6
解决办法
5万
查看次数

为什么我的代码显然调用了LocalDataStoreMgr.GetNamedDataSlot?

当我们的ASP.NET网站负载很重的时候,其中一台服务器会疯狂地使用100%的CPU,而根本没有响应.当我运行stackdump.exe正在运行的进程时,我发现几乎所有线程都以该方法结束LocalDataStoreMgr.GetNamedDataSlot.有些堆栈看起来好像我们自己的代码调用GetNamedDataSlot,其他堆栈显示HttpApplication.ExecuteStepHttpWriter.Write执行它.这是堆栈转储的片段:

OS Thread Id:9232
  System.LocalDataStoreMgr.GetNamedDataSlot(System.LocalDataStoreMgrN/A)
  System.Web.HttpApplication.ExecuteStep(ASP.global_asaxSystem.Web.HttpApplication+AsyncEventExecutionStepSystem.Boolean&)
  System.Web.HttpApplication+PipelineStepManager.ResumeSteps(System.Web.HttpApplication+PipelineStepManagerN/A)
  System.Web.HttpApplication.BeginProcessRequestNotification(N/AN/AN/A)
  System.Web.HttpRuntime.ProcessRequestNotificationPrivate(System.Web.HttpRuntimeSystem.Web.Hosting.IIS7WorkerRequestSystem.Web.HttpContext)
  System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(N/ASystem.IntPtrN/AN/A)
  System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(N/AN/AN/AN/A)
  System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(N/AN/AN/AN/A)
  System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(N/AN/AN/AN/A)

OS Thread Id:15308
  System.LocalDataStoreMgr.GetNamedDataSlot(System.LocalDataStoreMgrN/A)
  System.Web.HttpWriter.Write(System.Web.HttpWriterSystem.String)
  System.Web.HttpWriter.Write(N/AN/A)
  ASP.views_shared_advertcat_setadvertinformation_ascx.__Render__control1(N/AN/AN/A)
  System.Web.UI.Control.RenderChildrenInternal(N/AN/AN/A)
  System.Web.UI.Control.RenderControl(N/AN/AN/A)
  System.Web.UI.Control.RenderControl(N/AN/AN/A)
  System.Web.UI.Control.RenderChildrenInternal(N/AN/AN/A)
  System.Web.Mvc.ViewPage.Render(System.Web.Mvc.ViewUserControl+ViewUserControlContainerPageN/A)
  System.Web.UI.Control.RenderControl(N/AN/AN/A)
  System.Web.UI.Control.RenderControl(N/AN/AN/A)
  System.Web.UI.Page.ProcessRequestMain(System.Web.Mvc.ViewUserControl+ViewUserControlContainerPageSystem.BooleanSystem.Boolean)
  System.Web.UI.Page.ProcessRequest(System.Web.Mvc.ViewUserControl+ViewUserControlContainerPageN/ASystem.Boolean)
  System.Web.UI.Page.ProcessRequest(N/AN/AN/A)
  System.Web.UI.Page.ProcessRequest(System.Web.Mvc.ViewUserControl+ViewUserControlContainerPage)
  System.Web.UI.Page.ProcessRequest(N/AN/A)
  System.Web.Mvc.ViewPage.ProcessRequest(N/AN/A)
  System.Web.Mvc.ViewUserControl+ViewUserControlContainerPage.ProcessRequest(N/AN/A)
  System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerWrapper+<>c__DisplayClass4.<Wrap>b__3(N/A)
  System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerWrapper.Wrap(N/A)
  System.Web.HttpServerUtility.ExecuteInternal(System.Web.HttpServerUtilitySystem.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerWrapperN/AN/AN/ASystem.Web.VirtualPathN/AN/ASystem.ExceptionSystem.String)
  System.Web.HttpServerUtility.Execute(N/AN/AN/AN/AN/A)
  System.Web.HttpServerUtility.Execute(N/AN/AN/AN/A)
  System.Web.Mvc.ViewPage.RenderView(N/AN/A)
  System.Web.Mvc.ViewUserControl.RenderView(N/AN/A)
  System.Web.Mvc.ViewResultBase.ExecuteResult(N/AN/A)
  System.Web.Mvc.ControllerActionInvoker+<>c__DisplayClass1a.<InvokeActionResultWithFilters>b__17(N/A)
  System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(Funda.Web.Mvc.Controllers.Shared.AdvertControllerSystem.Web.Mvc.ResultExecutingContextN/A)
  System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(N/AN/AN/AN/A)
  System.Web.Mvc.Async.AsyncControllerActionInvoker+<>c__DisplayClass25.<BeginInvokeAction>b__22(System.Web.Mvc.Async.AsyncControllerActionInvoker+<>c__DisplayClass25N/A)
  System.Web.Mvc.Controller+<>c__DisplayClass1d.<BeginExecuteCore>b__18(N/AN/A)
  System.Web.Mvc.Async.AsyncResultWrapper+<>c__DisplayClass4.<MakeVoidDelegate>b__3(N/AN/A)
  System.Web.Mvc.Controller.EndExecuteCore(Funda.Web.Mvc.Controllers.Shared.AdvertControllerN/A)
  System.Web.Mvc.Async.AsyncResultWrapper+<>c__DisplayClass4.<MakeVoidDelegate>b__3(N/AN/A)
  System.Web.Mvc.MvcHandler+<>c__DisplayClass8.<BeginProcessRequest>b__3(System.Web.Mvc.MvcHandler+<>c__DisplayClass8N/A)
  System.Web.Mvc.Async.AsyncResultWrapper+<>c__DisplayClass4.<MakeVoidDelegate>b__3(N/AN/A)
  System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerWrapper+<>c__DisplayClass4.<Wrap>b__3(N/A)
  System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerWrapper.Wrap(N/A)
  System.Web.HttpServerUtility.ExecuteInternal(System.Web.HttpServerUtilitySystem.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerAsyncWrapperN/AN/AN/ASystem.Web.VirtualPathN/AN/ASystem.ExceptionSystem.String)
  System.Web.HttpServerUtility.Execute(N/AN/AN/AN/AN/A)
  System.Web.HttpServerUtility.Execute(N/AN/AN/AN/A)
  System.Web.Mvc.Html.ChildActionExtensions.ActionHelper(N/AN/AN/AN/AN/A)
  ASP.views_homepage_homepage_aspx.__Render__control5(N/AN/AN/A)
  System.Web.UI.Control.RenderChildrenInternal(N/AN/AN/A)
  System.Web.UI.Control.RenderControl(N/AN/AN/A)
  System.Web.UI.Control.RenderControl(N/AN/AN/A)
  ASP.views_masterpages_homepage_master.__Render__control1(ASP.views_masterpages_homepage_masterSystem.Web.UI.HtmlTextWriterASP.views_masterpages_homepage_master)
  System.Web.UI.Control.RenderChildrenInternal(N/AN/AN/A)
  System.Web.UI.Control.RenderControl(N/AN/AN/A)
  System.Web.UI.Control.RenderControl(N/AN/AN/A)
  System.Web.UI.Control.RenderChildrenInternal(N/AN/AN/A)
  System.Web.Mvc.ViewPage.Render(ASP.views_homepage_homepage_aspxN/A)
  System.Web.UI.Control.RenderControl(N/AN/AN/A)
  System.Web.UI.Control.RenderControl(N/AN/AN/A) …
Run Code Online (Sandbox Code Playgroud)

c# asp.net multithreading profiling newrelic

9
推荐指数
1
解决办法
511
查看次数

我如何推广多个相邻的多边形?

当您有一个包含Geometry类型字段(或Geography)的表时,可以调用该Reduce()函数以使形状的顶点数量减少.工作得非常好.然而,当多边形的多个相邻(它们共享其边界的一部分)时,缩小的多边形不一定这样做.

SQL批处理:

CREATE TABLE #Shapes (
shape geometry,
naam varchar(50)
 )

-- exact:
insert into #Shapes (naam, shape) VALUES ('Area A',Geometry::STGeomFromText('POLYGON ((52.084744368912652 5.1304192959796637, 52.085234231548384 5.1304194002877921, 52.085474282948049 5.1304486630822, 52.0857341082301 5.1304792705923319, 52.086134375073016 5.1306082883384079, 52.086594087770209 5.13079824927263, 52.087194303050637 5.1311187236569822, 52.089074697112665 5.1323992793913931, 52.089834430487826 5.1333390253130347, 52.090353938518092 5.1341692635323852, 52.090254480473 5.1342997345712416, 52.090824429301414 5.13520842681262, 52.09141399711384 5.1360295349486274, 52.091884278226644 5.1365492835175246, 52.092085719574243 5.1367767199408263, 52.092194211203605 5.1368992186617106, 52.092494247804545 5.1372492032188495, 52.092884057915427 5.13754907634854, 52.093083867570385 5.137679290259257, 52.093254011290028 5.1378082139755827, 52.093554640188813 5.1380093733314425, 52.094204571098089 5.1384683684445918, 52.094214495038614 5.1384888619650155, 52.093702809136488 5.1390791568504124, 52.0939114689827 5.1395669728517532, 52.0938675517682 5.1396009074524045, 52.093849835848111 5.1396084928439114, 52.093797143315896 5.1396473892964423, …
Run Code Online (Sandbox Code Playgroud)

sql-server geometry geolocation geospatial sql-server-2008

8
推荐指数
1
解决办法
2976
查看次数

防止许多不同的MVC URL填充ASP.NET缓存

我们的网站使用ASP.NET MVC作为其中的一部分页面.这些URL的格式通常为http://oursite/detail.mvc/12345/pictures/在此URL中,12345是数据库中的ID.我们有几十万个对象,我们为其显示详细页面.最近我们注意到该网站的内存使用量有所增加,所以我调查了一下.我们对生产站点进行了内存转储,发现大量的内存使用量是由"dmachine/webroot/1/site/detail.mvc/12345/pictures /"和"H"形式的Cache中的字符串引起的. :\网站\ detail.mvc\12345 \图片\".

进一步研究和大量使用Reflector表明这些字符串以System.Web.CachedPathData对象的形式存储在ASP.NET Cache中.这是ConfigurationManager在从web.config文件中读取信息时创建的.它调用HttpContext.GetSection() - > HttpContext.GetConfigurationPathData() - > CachedPathData.GetVirtualPathData().最后,在CachedPathData.GetConfigPathData中,确定所请求路径的虚拟路径,并将其缓存在ASP.NET缓存中而不会过期.

现在麻烦的是我们有数百万个不同的URL,并且对于每个路径,配置系统在缓存中存储了许多字符串(configPath,虚拟路径,物理路径).随着时间的推移,这些信息消耗几百MB,几乎所有缓存中的数据.

我假设当内存稀缺时,这些条目将被删除,但在操作中,它们不信任增长和增长的进程​​.它似乎也非常低效.有没有办法告诉HttpContext不要为每个唯一的URL缓存此信息?或者我们可以先将请求路径映射到一个更简单的URL,然后用它来选择正确的web.config?

.net memory asp.net asp.net-mvc

6
推荐指数
1
解决办法
617
查看次数

CLR程序集将不会加载64位SQL Server 2005

我们在安装SQL Server 2005(32位)时使用带有一些用户定义函数的程序集.我们使用如下脚本将其部署到生产中:

CREATE ASSEMBLY [Ourfunctions]
AUTHORIZATION [dbo]
FROM 0x4D5A9000...000
WITH PERMISSION_SET = SAFE
GO
CREATE FUNCTION [dbo].[GLOBAL_FormatString](@input [nvarchar](4000))
RETURNS [nvarchar](4000) WITH EXECUTE AS CALLER
AS 
EXTERNAL NAME [Ourfunctions].[UserDefinedFunctions].[GLOBAL_FormatString]
GO
Run Code Online (Sandbox Code Playgroud)

我们从未遇到过这些功能的任何问题.现在,当我们尝试将其中一个服务器升级到x64时,我们在调用任何函数时遇到错误.样本堆栈跟踪:

System.Data.SqlClient.SqlException:尝试加载程序集ID为65549时,Microsoft .NET Framework中发生错误.服务器可能资源不足,或者程序集可能不受PERMISSION_SET = EXTERNAL_ACCESS或UNSAFE信任.再次运行查询,或检查文档以了解如何解决程序集信任问题.有关此错误的更多信息:System.IO.FileLoadException:无法加载文件或程序集'ourfunctions,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null'或其依赖项之一.给定的程序集名称或代码库无效.(来自HRESULT的异常:0x80131047)System.IO.FileLoadException:at System.Reflection.Assembly.nLoad(AssemblyName fileName,String codeBase,Evidence assemblySecurity,Assembly locationHint,StackCrawlMark&stackMark,Boolean throwOnFileNotFound,Boolean -snip-

错误提到权限集EXTERNAL_ACCESSAND UNSAFE而我们使用级别SAFE.

.dll文件是在目标平台设置为'Any CPU'的情况下构建的,当我们尝试从文件而不是varbinary语法加载dll时,我们得到相同的结果.我们已经在http://support.microsoft.com/kb/918040中尝试了这些建议

我们在32位机器上尝试了完全相同的程序,一切正常.它必须是x86和x64之间的差异.有任何想法吗?

解决方案:我们终于找到了解决方案 事实证明我们的程序集确实是32位编译的.在Visual Studio中,我们使用了目标"Any CPU",但在检查底层.csproj时,我发现了以下代码段:

  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    ...other elements...
    <PlatformTarget>x86</PlatformTarget>
  </PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

所以我们的"任何CPU"目标实际上是构建一个x86程序集!Aaargh.我已经在颠覆中找回了这一行,但它在2006年首次登记已经存在.也许这是数据库项目的早期模板中的一个错误?

无论如何,谢谢你的帮助.我会接受拉斯的答案,因为我怀疑许多遇到同样问题的人最能得到他的回答.

.net sql-server 64-bit sqlclr

6
推荐指数
1
解决办法
4747
查看次数

我可以针对Power BI运行自己的DAX或MDX查询吗?

我在Power BI桌面上有一个数据模型.我想将它发布到服务器,但我也想让内部报告针对它运行MDX(或DAX)查询.这可能吗?我可以创建连接字符串并连接到Power BI,就像SSAS Cube一样吗?也许使用REST API?

编辑:谢谢你的回答.凯尔给了我最好的答案,所以我接受了他,但你们所有人都让我明白我最好只使用SSAS.这就是我所做的,有一些麻烦看到HTTP桥,但它现在就像一个魅力.

mdx dax powerbi

4
推荐指数
1
解决办法
2680
查看次数

为什么ImmutableList在其add方法中具有复杂度O(logN)?

我认为创建了N + 1个项目的新ImmutableList。因此,其复杂度应为O(N)。

c# immutable-collections

3
推荐指数
1
解决办法
513
查看次数