小编Rob*_*ins的帖子

序列化XAML的ConcurrentBag

在我的代码中,我有一个ConcurrentBag<Point3DCollection>.

我正在试图弄清楚如何序列化它们.当然,我可以使用提供者模型类进行迭代或打包,但我不知道它是否已经完成.

Point3DCollectionš本身可能相当大,可以站在被压缩到读写速度可达并从磁盘,但响应时间,我需要这在很大程度上是在用户界面级别.换句话说,出于性能原因,我更喜欢基于 XAML文本格式的二进制格式.(有一个很好的XAML文本序列化器,它是Helix 3D CodeProject的一部分,但它比我想要的慢.)

这是一个用例,我还在推出自己的序列化程序,还是有些东西已经为这种数据打包了?

.net c# wpf concurrency xaml

12
推荐指数
1
解决办法
1324
查看次数

如何从XAML LinearGradientBrush的偏移量中读取颜色?

给定LinearGradientBrush如下定义:

        <LinearGradientBrush x:Key="RedYellowGradient">
            <GradientStop Color="Blue" Offset="0.01" />
            <GradientStop Color="Purple" Offset="0.25"/>
            <GradientStop Color="Red" Offset="0.5"/>
            <GradientStop Color="Orange" Offset="0.75"/>
            <GradientStop Color="Yellow" Offset="1.0"/>
        </LinearGradientBrush>
Run Code Online (Sandbox Code Playgroud)

什么是需要采取的定义,并确定由特定的一个偏移表示的颜色,如0.13或0.82勿使任何可见?

这将采用具有这样的原型的函数的形式:

Function GetColorFromBrushOffset(br as LinearGradientBrush, offset as Single) as SomeColorDataStructure
Run Code Online (Sandbox Code Playgroud)

在函数体中需要做什么?我不是在寻找完成的代码(虽然我不会拒绝它!)只是关于使用什么数据结构和系统调用的一些想法.

wpf xaml lineargradientbrush

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

有没有办法在没有GoTo语句的情况下编写它?

编辑:这不是一个关于是否可以使用GoTo语句的问题.

这是一个关于如何在使用GoTo语句的情况下处理 .NET/IL中的O(n ^ 3)算法中心的问题.Dijkstra哲学的坚持者和同伴,请在未能阅读问题之前注意.

请考虑以下代码,其中对于大多数用例,For o = 0 to nz循环的内容将在300万到1800万次之间执行.子例程在我的代码中取代它作为Parallel.For()调用的参数.域的m,nynz,都在10到300之间.

它是手动优化的,以避免堆栈推送和子程序调用,换句话说,速度.我的愿望是避免编译IL,其中包括最内层循环内的操作码callicall操作码.

要在测试满足后中止最里面的三个循环,我使用GoTo语句中止不需要的测试.

问题是,有没有办法在没有GoTo的情况下对此进行编码?是否有一种方法可以对.net JIT-Compiler编译为更快的代码进行编码,而不需要call或者calli操作码以对象代码结束?

Sub SomeLambda(m As Integer, newarray As Short(,,))
    For n = 0 To ny
        For o = 0 To nz
            If newarray(m, n, o) <> 1 AndAlso newarray(m, n, o) <> -1 Then
                For m1 = m - 1 To m + 1
                    For n1 = n …
Run Code Online (Sandbox Code Playgroud)

.net vb.net performance il goto

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

将 Microsoft Graph ListItem 输出转换为相应的 C# 类型

通过 SharePoint 和 MS Graph 的组合提供的“帮助”,将 JSON 数据转换为类型化数据模型的工作似乎变得更加复杂。:-)

我在 Microsoft 365 中有一个 SharePoint 列表,我通过 C# 中的图形 API 访问该列表,其中查询目标是一个类型化类,其属性与 SharePoint 列表列属性相同。

类Graph API 返回It 需要变为 an类型的ListItema 中的结果,我可以通过序列化/反序列化往返从查询结果中获取列表来实现这一点,如下所示:Fields.AdditionalDataDictionary<string,object{System.Text.Json.JsonElement}>IEnumerable<DataItem>

var backToJSON = ListItems.Select(o => System.Text.Json.JsonSerializer.Serialize(o.Fields.AdditionalData));
var stronglyTypedItems = backToJSON.Select(jsonO => System.Text.Json.JsonSerializer.Deserialize<DataItem>(jsonO));
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点,无论是使用更智能的 OData 还是我没见过的 Graph API 中的某些东西,而不需要使用以前的 JSON 并通过 JSON 序列化器将其发送回两次?

更多详细信息如下:Graph Explorer 的输出 JSON 示例,其中value包含以下数组:

"value" : [ 
    { "id": "1001, 
      "fields": { 
        "Column" : "true", 
        "Column2" : "value2", 
        "Column3" : "65" 
      } 
    }, 
    { …
Run Code Online (Sandbox Code Playgroud)

c# json sharepoint-list sharepoint-online microsoft-graph-api

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

是什么导致 MSI 更新不更新安装程序中的组件?

(编辑:问题已更改。)

我有一个带有安装程序的产品,它是由 InstallShield 2010 构建的,所有帐户似乎都可以作为“新”安装进行安装。

我会定期更改安装内容,因为我使用错误修复等更新此或那个组件。在那些时候,我尝试更改已更新文件的元数据中的版本号,但有些组件是不可能的。当然,它们总是以最近的修改日期结束。我也在 MSI 数据中更改了产品的版本号。但是,我并没有每次都更改包代码。

当某些用户在我的产品已经存在的系统上运行安装程序时,他们会收到更新模式 UI(“您想要更新吗?”等)的提示,并且安装程序似乎已完成。但是,更新的文件在之后运行“修复”安装之前并不总是覆盖旧文件,特别是如果版本号没有改变,并且现在有证据表明使用“强制覆盖”标记组件的内容不会不要改变这种行为。

这里发生了什么?有什么办法可以得到更好的结果吗?每当我更新产品或更新组件时,包装代码是否需要更改?(编辑:每次我构建版本时,包代码都会改变,所以这不是问题的原因。)

编辑:这是一个更新用户界面,但更新后的维护实际上完成了所需的安装。

windows-installer installshield installshield-2010

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

并行化具有许多退出点的算法?

我面临并行化算法,该算法在其串行实现中检查更大的三维数组中的一组数组位置的六个面.(也就是说,选择一个数组元素,然后在x,y和z之间的元素'n'元素周围定义一个立方体或长方体,由数组的边界限定.

每个工作单元看起来像这样(Fortran伪代码;串行算法在Fortran中):

do n1=nlo,nhi
  do o1=olo,ohi          
    if (somecondition(n1,o1) .eq. .TRUE.) then
       retval =.TRUE.
       RETURN
    endif    
  end do 
end do 
Run Code Online (Sandbox Code Playgroud)

或C伪代码:

for (n1=nlo,n1<=nhi,n++) {
  for (o1=olo,o1<=ohi,o++) {
    if(somecondition(n1,o1)!=0) {
      return (bool)true;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

在总算法中有六个这样的工作单元,其中'lo'和'hi'值通常在10到300之间.

我认为最好的方法是安排六个或更多的执行线程,如果没有那么多的CPU核心进行循环,理想情况是并行执行循环,其目标与串行算法相同:somecondition()成为True,所有线程之间的执行必须立即停止,并True在共享位置设置一个值.

Windows编译器中有哪些技术可以方便地并行化这样的任务?显然,我需要一个等待信号量或工作线程完成的主线程,因此需要嵌套和信令,但我对OpenMP的经验是在这一点上的介绍.

在OpenMP中是否有消息传递机制?

编辑:如果"nlo"和"nhi"或"olo"和"ohi"之间的最大差异为8到10,则表示此嵌套循环不超过64到100次迭代,并且不超过384到600次迭代六个工作单位在一起.基于此,是否值得并行化?

windows parallel-processing multithreading fortran openmp

5
推荐指数
1
解决办法
449
查看次数

给定不规则多边形的顶点列表,如何创建内部三角形以有效地构建平面3D网格?

我正在使用Unity,但解决方案应该是通用的.我将通过鼠标点击获得用户输入,鼠标点击定义了封闭的不规则多边形的顶点列表.该顶点将定义平面3D网格的外边缘.

要在Unity中以程序方式生成网格,我必须指定所有顶点以及它们如何连接以形成三角形.

因此,对于凸多边形而言,它是微不足道的,我只是制作具有顶点1,2,3然后1,3,4等的三角形,形成类似孔雀尾巴的东西.

但对于凹多边形而言,并非如此简单.是否有一种有效的算法来查找内部三角形?

geometry polygons unity-game-engine computational-geometry

5
推荐指数
1
解决办法
7872
查看次数

.NET编译器 - 内置嵌套循环优化吗?

考虑以下代码片段,在执行效率方面遍历三维单列数组,假设process1()process2()执行相同的时间长度:

float arr[mMax,nMax,oMax];

for (m = 0; m < mMax; m++)
  for (n = 0; n < nMax; n++)
    for (o = 0; o < oMax; o++)
      { process1(arr[m,n,o]); }

for (o = 0; o < oMax; o++)
  for (n = 0; n < nMax; n++)
    for (m = 0; m < mMax; m++)
      { process2(arr[m,n,o]); }
Run Code Online (Sandbox Code Playgroud)

现在,众所周知,C#将.NET框架中的数组组织为行主结构.没有任何优化,我会假设第一个循环的执行速度比第二个循环快得多.

问题是:CLR的JIT或cs.exe/vb.exe编译器是否检测并优化这样的循环,可能重新排序嵌套,或者我应该始终保持警惕潜在的性能命中,特别是在可能发生的情况方面如果我试图并行化循环?

.net c# compiler-optimization task-parallel-library

5
推荐指数
1
解决办法
174
查看次数

是否有Visual Studio加载项用于从代码文件中的字符串填充资源文件?

我正在维护一个WinForms应用程序,该应用程序不是使用任何有助于本地化项目中与表单没有直接关联的类的开发模式,或者是表单的代码隐藏部分.

因此,几乎每个代码文件中都有MessageBox()代码,其中包含英文文本.我想找到一个工具,它将从代码中"刮掉"这些字符串,将字符串插入资源文件中,并用注释中的替换字符串替换调用资源.

这样的工具存在吗?

.net c# vb.net localization visual-studio

4
推荐指数
2
解决办法
4056
查看次数

请求 Microsoft Graph 委派权限时,没有为 AD B2C 用户返回访问令牌

用户故事:给定一个 ADB2C 用户,具有全局管理员角色和 oid 01234567-901a-bcde-f012-3456789abcde(不是真正的 oid),我希望能够以该用户身份登录并从“ https://graph.microsoft.com”检索用户配置文件/beta/me ”或“ https://graph.microsoft.com/beta/users/01234567-901a-bcde-f012-3456789abcde ”。文档中将两者列为 B2C 的有效端点。

它不起作用:没有访问令牌!

在仅分配了 Microsoft Graph 权限范围的应用程序注册中,我使用邮递员请求不记名令牌以访问 MS Graph。有一个 Web 重定向 URI ( https://oauth.pstmn.io/v1/callback )、一个客户端密钥,并且对访问令牌和 ID 令牌均启用隐式授予。

要求的范围是:openid offline_access https://graph.microsoft.com/Directory.AccessAsUser.All

同样,B2C 用户帐户具有全局管理员角色。

  • 隐式流程返回错误消息

AADB2C90205:此应用程序没有足够的权限对​​此 Web 资源执行该操作。

  • 当包含应用程序密钥时,授权代码流缺少访问承载令牌。有一个 ID 令牌和一个刷新令牌,但没有访问令牌。无论我是否将授权发送到外部浏览器,这都是有或没有 PKCE 的情况。

我的租户中的应用程序有一个用户流程,B2C_1_postman基本上是默认的。它与邮递员、其他测试应用程序以及 B2C 管理刀片中的“运行用户流程”功能配合得很好。

身份验证端点是:

https://{Tenant}.b2clogin.com/{Tenant}.onmicrosoft.com/B2C_1_postman/oauth2/v2.0/authorize
Run Code Online (Sandbox Code Playgroud)

令牌端点是:

https://{Tenant}.b2clogin.com/{Tenant}onmicrosoft.com/B2C_1_postman/oauth2/v2.0/token
Run Code Online (Sandbox Code Playgroud)

我已经通过 Microsoft 的 github 存储库中的几个桌面演示复制了此行为,现在又使用 Postman。该应用程序名为“postman”,位于 ADB2C 租户中。我授予它以下应用程序 API 范围:

Directory.AccessAsUser.All
Directory.Read.All
Directory.ReadWrite.All
Directory.email
Directory.offline_access
Directory.profile
Run Code Online (Sandbox Code Playgroud)

此过程反映了https://github.com/Azure-Samples/active-directory-b2c-dotnet-desktop上的桌面演示的设置,唯一的例外是我想要我的桌面应用程序,而不是 NodeJS 示例应用程序使用 MS Graph。(如果我添加示例应用程序的端点,则此应用程序注册工作得很好。但指定 MS Graph 范围始终返回空访问 ID。)

我怎样才能让它发挥作用?

azure-ad-b2c microsoft-graph-api

4
推荐指数
2
解决办法
3369
查看次数

当存在基于触发器隐藏显示元素的复杂数据模板时,我的ListView或ListBox控件大小不会缩小?

我有一个ListView元素,每个ListViewItem都有一个DataTemplate定义如下.运行时,ListView的高度不会折叠到视图中的项目上,这是不合需要的行为:

<DataTemplate x:Key="LicenseItemTemplate">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"  />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <TextBlock Grid.Row="0" Text="{Binding company}"></TextBlock>
        <Grid Grid.Row="1" Style="{StaticResource HiddenWhenNotSelectedStyle}">
            <Grid.RowDefinitions>
                <RowDefinition />
            </Grid.RowDefinitions>
            <Button Grid.Row="0">ClickIt</Button>
        </Grid>
    </Grid>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

外部网格的第二行应用了一个样式,如下所示.样式的目的是公开所选数据项的详细视图:

<Style TargetType="{x:Type Grid}" x:Key="HiddenWhenNotSelectedStyle" >
    <Style.Triggers>
        <DataTrigger
            Binding="{Binding Path=IsSelected, 
                        RelativeSource={
                        RelativeSource 
                        Mode=FindAncestor, 
                        AncestorType={x:Type ListViewItem}
                        }
                        }" 
            Value="False">
            <Setter Property="Grid.Visibility" Value="Collapsed" />
        </DataTrigger>
        <DataTrigger
            Binding="{Binding Path=IsSelected, 
                        RelativeSource={
                        RelativeSource 
                        Mode=FindAncestor, 
                        AncestorType={x:Type ListViewItem}
                        }
                        }" 
            Value="True">
            <Setter
                Property="Grid.Visibility"
                Value="Visible"
            />
        </DataTrigger>
    </Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)

ListView呈现如下: ListView的高度是应该的两倍.

当没有选择任何元素时,所需的外观是这样的: ListView的高度折叠为列出项目.

...当然,当通过选择使第二个网格可见时,ListView的高度调整以适应附加内容.我该怎么做才能获得理想的行为?

silverlight wpf height xaml listview

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

将REAL的数组行转换为逗号分隔的字符串

我有一个非常古老的Fortran程序,它将数据从一种文本格式转换为另一种文本格式.在一个地方,它处理分配的数据数组如下:

  real*4, allocatable   :: s(:,:) ! is the declaration
  ! ...
  allocate (s(16,k)) ! is the allocation
  ! then, in a loop later on:
  do i=1,k
     write (7,*) (s(j,i),j=1,16)
  end do   
Run Code Online (Sandbox Code Playgroud)

该代码的输出如下所示:

-1.375000 -1.375000 327277.0 328682.0 2.750000 0.1250000 0.0000000E + 00 0.0000000E + 00 0.0000000E + 00 0.0000000E + 00 0.0000000E + 00 0.0000000E + 00 1.000000 5.000000 400.0000 1.000000

我需要它看起来像这样:

-1.375,-1.375, - .125,1.375,1.375,0,0,0,0,0,0,0,1,5,1,1

最重要的是我得到一个逗号来分隔字段,而不是其他空格.

使用该FORMAT声明,该怎么办?

编辑:我注意到这一行: write (7, "(*(F8.5,:,','))") s(:,i)

...生成如下所示的输出:

 3.00000, 4.50000, 1.00000,********, 0.00000, 0.00000, 0.00000, …
Run Code Online (Sandbox Code Playgroud)

format fortran string-formatting

2
推荐指数
2
解决办法
1053
查看次数

C#类和实例构造函数

MSDN RyuJIT博客中给出了这样的指令设置CTP3:

在RyuJIT最终之前需要一些棘手的事情:将一个对Microsoft.Numerics.Vectors.Vector的引用添加到将在使用新Vector类型的方法之前调用的类构造函数.我建议把它放在程序的入门类的构造函数中.它必须出现在类构造函数中,而不是实例构造函数中.

我对Objective-C中的类/实例构造比我在C#中更精通.他在谈论一个不同的概念吗?C#中的类构造函数和实例构造函数有什么区别?在这种情况下,"类构造函数"只是无参数构造函数吗?

c# constructor simd

1
推荐指数
2
解决办法
121
查看次数