小编Yve*_*lpe的帖子

快速文本阅读(File.ReadAllText()和/或StreamReader.ReadToEnd()的替代方案)

快速阅读的问题:我想知道是否有其他技术我忽略了,也许p /调用某个库(无论是winapi还是第三方库).欢迎提出所有建议.

问题的完整上下文:对于给定的用例,我需要将文本文件读入内存,然后我可以操作.问题不在于操作,而在于I/O. 我目前正在使用以下C#技术:

1)"文件"的ReadAllText()方法

var content = File.ReadAllText(file.FullName);
Run Code Online (Sandbox Code Playgroud)

2)"StreamReader"的ReadToEnd()方法

var content = String.Empty;
using(var streamReader = File.OpenText(file.FullName)) {
    content = streamReader.ReadToEnd();
}
Run Code Online (Sandbox Code Playgroud)

3)我也尝试过使用BufferedStream方法2

对于介于5到20MB之间的文件,所有文件的性能大致相同.那么,接下来的问题是:我想知道是否有其他技术我忽略了,也许p /调用某个库(无论是winapi还是第三方库).欢迎提出所有建议.

c# string performance pinvoke text

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

REST Api为同一个对象返回不同的对象名,如何使用RestSharp处理?

我正在使用RestSharpQualtrics API(v 2.5)编写C#实现.调用方法getUserIds时,它返回JSON格式的用户列表(请参阅下面的示例输出).

我面临的问题/问题是,对于每个用户对象(下面的对象列表Result),它会生成一个不同的id,从URH_.当使用json2csharp时,它假设它总是一个不同的类,而实际上它与你在输出中看到的完全相同,并且如api的文档中所述.我怎样才能最好地解决这个问题 - 这样我才能创建一个UserData可以重用的课程?因为现在我显然总是URH_在每个响应中看到这些随机前缀类.

注意:我以为我可以尝试先按下响应,当我得到响应时,用字符串替换URH_Result对象下的每个前缀对象"UserData"- 但我觉得这有点违反规则,并认为社区会有一个更好的解决方


下面是原始JSON输出(请注意,我删除了敏感信息):

{"Meta":{"Status":"Success","Debug":""},"Result":{"URH_3wpA9pxGbE0c7Xu":{"DivisionID":null,"UserName":"user.name@domain.com","UserFirstName":"x","UserLastName":"x","UserAccountType":"UT_4SjjZmbPphZGKDq","UserEmail":"x.x@x.x","UserAccountStatus":"Active"},"URH_57vQr8MVXgpcPUo":{"DivisionID":"DV_XXXXXXXX","UserName":"jxxxx@xx.xxx","UserFirstName":"X","UserLastName":"X","UserAccountType":"UT_BRANDADMIN","UserEmail":"xxxx@xxg.xxx","UserAccountStatus":"Active"},"URH_6ujW1EP0QJOUaoI":{"DivisionID":"DV_XXXXXXXYZ","UserName":"x.xckx@xxx.xyz","UserFirstName":"x","UserLastName":"x","UserAccountType":"UT_XXXXXABCD","UserEmail":"c.c@cc.com","UserAccountStatus":"Active"}}}
Run Code Online (Sandbox Code Playgroud)

这是我使用json2csharp生成模型时得到的结果:

public class Meta
{
    public string Status { get; set; }
    public string Debug { get; set; }
}

public class URH3wpA9pxGbE0c7Xu
{
    public object DivisionID { get; set; }
    public string UserName { get; set; }
    public string …
Run Code Online (Sandbox Code Playgroud)

c# rest json restsharp qualtrics

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

日志记录和“依赖倒置+抽象”——关注点分离

由于有很多日志框架,我希望为每个应用程序编写一个抽象,以便我控制可以插入的日志框架。这意味着我在例如 Log4Net 或 NLog 上不可靠,但是我提供了一个接口/抽象,然后在我自己的抽象中提供了插件框架。

沿着这些路线的东西(可能有点简化),我可以将其传递给任何需要依赖项的对象。

interface ILogger {
    void LogMessage(string message, Severity severity);
    void LogDebug(string message);
    void LogInfo(string message);
    void LogWarning(string message);
    void LogError(string message);
    void LogFatal(string message);
}
Run Code Online (Sandbox Code Playgroud)

之后我的计划是为我想要使用的日志框架编写适配器/实现 - 这样我就可以在必要时插入任何其他日志框架。

public sealed class Log4NetLogger : ILogger {
   /// Implementation and Log4Net specifics here
}
public sealed class NlogLogger : ILogger {
   /// Implementation and Log4Net specifics here
}
Run Code Online (Sandbox Code Playgroud)

这些我将通过 IoC 或资源定位器注入/实例化,具体取决于我正在处理的应用程序的实现细节。

问题:我不知道这是否是个好主意?从头开始写这个,考虑可能

  • 丢失记录框架内的上下文信息
  • 重新发明轮子
  • 性能下降

另一方面,对我的好处是:

  • 如果操作正确,我将能够切换出去,或者添加一个非常自定义的实现。
  • 我不需要在已经存在和正在生产的类之后接触内部,从而遵守可靠的特别是开放/封闭的原则 - 引入更少的错误。

任何指导 …

c# logging log4net nlog

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

使用System.Windows.Automation读取Edge Browser Title和Url

我正在尝试从Microsoft EDGE浏览器中读出TITLE和URL.最好使用System.Windows.Automation执行此操作,因为代码库已经将此用于其他问题.

  1. 是否可以使用System.Windows.Automation?
  2. 如何访问URL?

我现在这么远:

AutomationId "TitleBar"
ClassName "ApplicationFrameWindow"
Name = [string]
=> Reading out this element gives me the TITLE

=> Walking it's children, I find the item "addressEditBox":
   AutomationId "addressEditBox"
   ClassName "RichEditBox"
   Name "Search or enter web address"
   => I always get back the string "Search or enter web address"
   => This is the control where the url is in, though it isn't updated as the user goes to a website, it always returns a fixed string.
Run Code Online (Sandbox Code Playgroud)

在代码中: …

c# ui-automation microsoft-ui-automation microsoft-edge

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

执行"alter"后MSSQL 2012查看速度更快

我有一个情境/上下文,其中特定视图在返回结果之前需要120秒.在执行简单的ALTER(或删除/创建)时,视图需要1到2秒.这怎么可能?我们如何解决这个问题 - 因为我们没有可以帮助我们的专用DBA.由于我们拥有链接服务器设置(MSSQL Server 2012抱怨这一点),因此无法制作索引视图.

以下是有关设置的信息.

TL; DR View_MAIN在一段时间后需要120秒.当我们在View_X,View_Y和View_MAIN上执行ALTER视图而不改变任何内容时,性能再次正常为1到2秒.


View_MAIN

SELECT 
   column1, column2, column3, column4, column5
FROM View_X

UNION ALL

SELECT 
   column1, column2, column3, column4, column5
FROM View_Y
Run Code Online (Sandbox Code Playgroud)

View_X

SELECT
   LTRIM(RTRIM(table1.a)) as column1,
   table2.b COLLATE Latin1_General_CI_AS as column2,
   table1.c as column3,
   CAST(table3.d AS DATETIME) as column4,
   'XXXXXX' as column5
FROM
   [linkedserver01].[DATABASE_IDN].[dbo].[dataForX] table1
   LEFT OUTER JOIN [linkedserver02].[DATABASE_INFM] as table2
   ON table2.id = table1.id
   LEFT OUTER JOIN [linkedserver02].[DATABASE_PIK] as table3
   ON table3.id = table1.id
Run Code Online (Sandbox Code Playgroud)

View_Y

SELECT
   LTRIM(RTRIM(table1.a)) as column1,
   table2.b COLLATE Latin1_General_CI_AS …
Run Code Online (Sandbox Code Playgroud)

sql-server sqlperformance sql-view

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

EF Core Migrations不会获取所有属性

使用EF Core Migrations时,工具不会获取我的所有属性,只有"Id"和一些(不是全部)FK(导航属性).它似乎也非常理解"每个层次结构表" - 因为它设置了我想要的鉴别器,但是迁移文件本身并不反映我在模型命名空间中的属性(参见github代码).

我的DbContext位于:https://github.com/aredfox/TheConference/blob/master/InfoBooth/TheConference.InfoBooth.Data/InfoBoothContext.cs 我的模型类在这里:https://github.com/aredfox/TheConference/树/主/ InfoBooth/TheConference.InfoBooth.Core /型号

您可以在[ https://github.com/aredfox/TheConference/blob/master/InfoBooth/TheConference.InfoBooth.Data/Migrations/20170604125116_Initial.cs ] 查看生成的"初始迁移" .在那里你会看到它检测到所有Id属性(在基类中定义[Entity][1]),但没有检测到我的Model类的其他属性.

我使用添加控制台应用程序来运行迁移的方法(否则它将无法工作 - 请参阅Julie Lerman关于开始使用EF Core 的提示).因此,在运行迁移时,我这样做:dotnet ef --startup-project ../../TheConference.Infrastructure.ConsoleApp migrations add Initial.

我是否必须在EFCore中使用注释modelBuilderEntityTypeConfiguration形式让EF知道我想要采取什么?.

.net c# entity-framework entity-framework-core

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

从 Microsoft Graph API 获取驱动器的项目:请求格式错误或不正确

我正在尝试通过 Microsoft Graph Api (SDK) 获取驱动器的项目并尝试了以下选项:

  1. _graphServiceClient.Drives[driveInfo.Id].Items.Request().GetAsync():,不幸的是,这会导致错误消息错误消息“请求格式错误或不正确”和代码“invalidRequest”_graphServiceClient.Drives[driveInfo.Id].Request().GetAsync()但是,如果我执行,我会取回所有驱动器,但Items属性为null.

  2. _graphServiceClient.Drives[driveInfo.Id].Request().Expand(d => d.Items).GetAsync(),这也会导致错误消息“请求格式错误或不正确”和代码“invalidRequest”

我不知道如何从这里继续,仍在研究中,但目前文档让我一无所知。任何人都成功.Expand()或从云端硬盘获取实际文件?

谢谢,是

c# onedrive microsoft-graph-sdks microsoft-graph-api

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

请解释以下C#代码的含义

"VisibleChanged"事件是什么意思?

例如,在此行的代码中:

slidePane.VisibleChanged += new EventHandler(slidePane_VisibleChanged);
Run Code Online (Sandbox Code Playgroud)

c# winforms

-7
推荐指数
1
解决办法
134
查看次数