小编Stu*_*art的帖子

如何提高LINQ的性能?

更新 感谢@usr我只需更改即可将此缩短至~3秒

.Select(
     log => log.OrderByDescending(
     d => d.DateTimeUTC
     ).FirstOrDefault()
)
Run Code Online (Sandbox Code Playgroud)

    .Select(
     log => log.OrderByDescending(
     d => d.Id
     ).FirstOrDefault()
)
Run Code Online (Sandbox Code Playgroud)

我有一个包含两个表的数据库 - 日志和收集器 - 我正在使用实体框架来读取.有86个收集器记录,每个记录有50000+对应的日志记录.

我希望获得每个收集器的最新日志记录,这可以通过此SQL轻松完成

SELECT CollectorLogModels_1.Status, CollectorLogModels_1.NumericValue,
    CollectorLogModels_1.StringValue, CollectorLogModels_1.DateTimeUTC,
    CollectorSettingsModels.Target, CollectorSettingsModels.TypeName 
FROM
    (SELECT CollectorId, MAX(Id) AS Id 
     FROM CollectorLogModels GROUP BY CollectorId) AS RecentLogs 
INNER JOIN CollectorLogModels AS CollectorLogModels_1 
   ON RecentLogs.Id = CollectorLogModels_1.Id 
      INNER JOIN CollectorSettingsModels 
          ON CollectorLogModels_1.CollectorId = CollectorSettingsModels.Id
Run Code Online (Sandbox Code Playgroud)

这需要大约2秒的时间来执行.

我能用LINQ得到的最接近的是以下内容

var logs = context.Logs.Include(co => co.Collector)
                .GroupBy(
                    log => log.CollectorId, log => log
                )
                .Select( …
Run Code Online (Sandbox Code Playgroud)

c# linq sql-server

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

即使节点发生更改,xmlNode.SelectSingleNode也始终返回相同的值

我正在阅读一堆XML文件,转换它们并将数据加载到另一个系统.

以前我使用ThreadPool完成了这个,但是文件的提供者因此结构发生了变化,所以我现在正在尝试Aysync-Await并获得奇怪的结果.

当我处理文件时,我得到了一个xmlNodes列表并循环遍历它们

foreach (XmlNode currentVenue in venueNodes)
{
      Console.WriteLine(currentVenue.OuterXml);
      Console.WriteLine(currentVenue.SelectSingleNode(@"//venueName").InnerText);
}
Run Code Online (Sandbox Code Playgroud)

但是第二个WriteLine总是返回第一个节点的预期结果,例如:

<venue venueID="xartrix" lastModified="2012-08-20 10:49:30"><venueName>Artrix</venueName></venue>
Artrix
<venue venueID="xbarins" lastModified="2013-04-29 11:39:07"><venueName>The Barber Institute Of Fine Arts, University Of Birmingham</venueName></venue>
Artrix
<venue venueID="xbirmus" lastModified="2012-11-13 16:41:13"><venueName>Birmingham Museum &amp; Art Gallery</venueName></venue>
Artrix
Run Code Online (Sandbox Code Playgroud)

这是完整的代码:

public async Task ProcessFiles()
{
    string[] filesToProcess = Directory.GetFiles(_filePath);
    List<Task> tasks = new List<Task>();

    foreach (string currentFile in filesToProcess)
    {
        tasks.Add(Task.Run(()=>processFile(currentFile)));
    }

    await Task.WhenAll(tasks);

}

private async Task processFile(string currentFile)
{
    try
    {
         XmlDocument currentXmlFile = new XmlDocument();
         currentXmlFile.Load(currentFile); …
Run Code Online (Sandbox Code Playgroud)

c# xml

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

这段JavaScript如何工作?

这段代码只是停留在Body中它完全符合我的期望,但我不明白为什么.

特别是我没看到如何调用webservice,看起来脚本将调用添加到Head部分并且可能重新加载页面但是我不确定并且不喜欢不知道或者这行意味着什么 - script.onload = script.onreadystatechange = function()

有人可以解释一下吗?

var script = document.createElement("script"),
    head = document.getElementsByTagName("head")[0],
    url = "https://services.postcodeanywhere.co.uk/PostcodeAnywhere/Interactive/FindByPostcode/v1.00/json.ws?";

// Build the query string
url += "&Key=" + encodeURI(pca_Key);
url += "&Postcode=" + encodeURI(postcode);
url += "&CallbackFunction=PostcodeAnywhere_FindByPostcode_End";

script.src = url;

// Make the request
script.onload = script.onreadystatechange = function () {
    if (!this.readyState || this.readyState === "loaded" || this.readyState === "complete") {
        script.onload = script.onreadystatechange = null;
        if (head && script.parentNode)
            head.removeChild(script);
    }
}

head.insertBefore(script, head.firstChild);
Run Code Online (Sandbox Code Playgroud)

斯图

javascript

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

Webjob始终发布为连续且未触发

我有一个Azure WebJob,我正在从Visual Studio 2017发布到Standard S1 App Service,该WebJob应该由CRON触发,但始终发布为Continuous,并且我无法弄清楚自己做错了什么(另外两个WebJob发布很好)

我在应用程序设置中将App Service设置为“始终在线” 在此处输入图片说明

我的日程安排在根目录中有一个settings.job文件

{
     "schedule": "0 3 5 * * 1-5"
}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我的课程

namespace EventPushUpdater
{
    using Microsoft.Azure.WebJobs;
    using MBL.AzureKeyVaultHelpers;

    internal class Program
    {
        private static void Main()
        {
            Properties.Settings s = Properties.Settings.Default;

            IKeyVault kv = new KeyVaultHelper(s.ClientId, s.ClientKey, s.KeyVaultRoot);

            var config = new JobHostConfiguration();
            config.DashboardConnectionString = kv.GetSecretValue(s.DashboardConnectionString);
            config.StorageConnectionString = kv.GetSecretValue(s.DashboardConnectionString);            
            var host = new JobHost(config);

            host.Call(typeof(Functions).GetMethod("PushEvents"), new { keyVault = kv });
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

并且该函数被调用

public class Functions
{
    [NoAutomaticTrigger]
    public …
Run Code Online (Sandbox Code Playgroud)

azure-webjobs

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

标签 统计

c# ×2

azure-webjobs ×1

javascript ×1

linq ×1

sql-server ×1

xml ×1