小编Ale*_*der的帖子

ExtJS存储 - 只加载一次JSON

我有多个商店需要具有不同rootProperty的相同JSON文件.是否有可能加载json文件一次并用它填充所有商店?截至目前,具有三个不同的rootProperties的三个商店导致对服务器的三次调用,以获得包含数据的可能兆字节大小的JSON文件,并且针对每个请求反复生成.

json看起来像:

{"users":[{"id":0,"name":"John Doe",...},...],
 "threads":[{"id":0,"startedBy":0,"lastPost":0,...},...],
 "posts":[...]}
Run Code Online (Sandbox Code Playgroud)

三个商店都非常相似,一个例子:

store: {
    model: 'Forum.model.Post',
    autoLoad: true,
    proxy:{
        type: 'ajax'
        url: '../api/json.php'
        reader: {
            type:'json'
            rootProperty:'posts'
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

javascript json extjs

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

C#WebAPI垃圾收集

我刚刚将第一个C#WebAPI应用程序交付给第一个客户.在正常负载下,性能最初甚至比我预期的要好.原来.

一切都工作正常,直到某些时候,内存已经启动,垃圾收集开始乱成一团(如"它收集的物品还没有垃圾").那时,有多个W3WP线程,总共有10个ram,每个工人有一个单位数的演出.重新启动IIS后,一切都恢复正常,但当然内存使用率再次上升.

如果我错了,请纠正我,但是

  • C#不应该有自动垃圾回收吗?
  • GC收集WebAPI应用程序的垃圾应该不容易吗?

请帮助我:

  • 如何明确说明GC应该收集什么,从而防止内存泄漏?是someBigList = null;要走的路?
  • 如何检测内存泄漏的位置?

编辑:让我澄清一些事情.

我的.NET WebAPI应用程序主要是一堆

public class MyApiController:ApiController
{
    [HttpGet]
    public MyObjectClass[] MyApi(string someParam) {
        List<MyObjectClass> list = new List<MyObjectClass>();
        ...
        for/while/foreach {
            MyObjectClass obj = new MyObjectClass();
            obj.firstStringAttribute = xyz;
            ...
            list.Add(obj);
        }
        return list.ToArray();
    }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,GC应该很简单:在"返回"之后,所有局部变量都应该是垃圾.然而,每次调用时,使用的内存都会增加.

我最初认为C#WebAPI程序的行为类似于(预编译)PHP:IIS调用程序,执行它,返回值,然后完全处理掉.

但这种情况并非如此.例如,我发现静态变量在运行之间保持数据,现在我处理了所有静态变量.

因为我发现静态变量是GC的一个问题:

 internal class Helper
 {
     private static List<string> someVar = new List<string>();
     internal Helper() {
         someVar=new List<string>();
     }
     internal void someFunc(string str) {
         someVar.Add(str);
     }
     internal string[] someOtherFunc(string str) …
Run Code Online (Sandbox Code Playgroud)

c# garbage-collection memory-leaks asp.net-web-api

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

WebAPI:从控制器构造函数中检索 GET 参数

每次调用我的 WebAPI 都可能(也可能不)包含 GET 参数

/api/SomeControllerFunction?loglevel=(someint)
Run Code Online (Sandbox Code Playgroud)

从控制器内部的函数中,我可以初始化一个 LogCollector:

[HttpGet] 
SomeControllerFunction(int loglevel = 0)
{
    LogCollector logger = new LogCollector(loglevel)
}
Run Code Online (Sandbox Code Playgroud)

为了不经常重复自己,我想通过将它添加到 BaseController 的构造函数中来将其隐藏在类层次结构中,我的所有控制器都将从该构造函数继承:

public class BaseController: ApiController
{
    internal LogCollector Logger
    BaseController()
    {
        Logger = new LogCollector(loglevel);
    }
Run Code Online (Sandbox Code Playgroud)

但是如何从构造函数访问 GET 参数?

c# asp.net-web-api

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

通过全局过滤器保护 WebAPI

我发现Controller只需添加以下行即可保护 MVC 应用程序中的所有 MVC

filters.Add(new System.Web.Mvc.AuthorizeAttribute());
Run Code Online (Sandbox Code Playgroud)

RegisterGlobalFilters。我的 ApiController 仍然需要通过手动添加[Authorize]属性来保护。我是否可以添加类似的行来保护我的所有 WebAPI ApiController

WebAPI的属性[Authorize]在 中System.Web.Http.AuthorizeAttribute,但我没有成功

filters.Add(new System.Web.Http.AuthorizeAttribute());
Run Code Online (Sandbox Code Playgroud)

这会引发错误

给定的过滤器实例必须实现以下一个或多个过滤器接口:IAuthorizationFilter、IActionFilter、IResultFilter、IExceptionFilter。

c# asp.net asp.net-mvc asp.net-web-api

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

Azure WebJob失败:无法加载文件或程序集

如何将DLL文件添加到Azure WebJob,或链接到相应Azure AppService中可用的DLL文件?

我的WebJob是一个控制台应用程序,每天在Cron架构上运行.

当我手动测试时,它失败了

未处理的异常:System.IO.FileNotFoundException:无法加载文件或程序集"MyIISApp,Version = 1.2.3.4,Culture = neutral,PublicKeyToken = null"或其依赖项之一.该系统找不到指定的文件.

但我无法在Azure WebJob文件上载过程中选择多个文件.

我已经尝试将EXE文件与DLL一起上传到我的Azure AppService,但我无法在WebJobs选项卡中的任何位置为Execution选择此EXE文件 - 它总是希望单个文件上载.

.net c# azure

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

WebAPI OAuth 注销 - 如何删除令牌 Cookie?

我有一个带有 OAuth 登录配置的 WebAPI,如下所示:

app.UseOpenIdConnectAuthentication(
    new OpenIdConnectAuthenticationOptions
    {
        ClientId = clientId,
        Authority = authority,
        PostLogoutRedirectUri = "https://www.microsoft.com/",
        Notifications = new OpenIdConnectAuthenticationNotifications
        {
            AuthenticationFailed = context =>
            {
                context.HandleResponse();
                context.Response.Redirect("/Error?message=" + context.Exception.Message);
                return Task.FromResult(0);
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

并强制所有控制器使用登录

config.Filters.Add(new System.Web.Http.AuthorizeAttribute());
Run Code Online (Sandbox Code Playgroud)

我现在想添加一个名为 LogoutController 的 ApiController(猜猜它是做什么的)。

我发现我可以使用以下方式从 MVC 注销

System.Web.Security.FormsAuthentication.SignOut();
Run Code Online (Sandbox Code Playgroud)

但我没有以这种方式从 WebAPI 注销。我没有找到任何如何从 WebAPI 注销的信息。但我发现注销过程中可能存在错误,cookie 被保留并必须手动删除,但是代码又是 MVC,似乎我无法进入HttpCookie我的HttpResponseMessage对象:

    [HttpGet]
    public HttpResponseMessage Logout()
    {
        FormsAuthentication.SignOut();

        // clear authentication cookie
        HttpCookie cookie1 = new HttpCookie(FormsAuthentication.FormsCookieName, "");
        cookie1.Expires = DateTime.Now.AddYears(-1); …
Run Code Online (Sandbox Code Playgroud)

c# cookies oauth-2.0 asp.net-web-api

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

在运行时启用/禁用缓冲渲染

我有一个使用缓冲渲染器的网格。

对于打印,我将网格DOM复制到新窗口中,然后将其发送到打印机。为此,必须完全渲染DOM,但对于带缓冲的渲染器,则不是。

如果需要的话,我将完全禁用缓冲的渲染器,但是由于只有少数用户使用打印功能,所以我宁愿不使用它。

是否有可能在获取DOM之前暂时关闭bufferedRenderer,然后再将其重新打开?

extjs

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

使用RowNumber的SELECT需要很长时间才能执行

我有一个包含调试消息的表,定义如下:

id  INT NOT NULL IDENTITY
message TEXT NOT NULL
date    DATETIME NOT NULL
Run Code Online (Sandbox Code Playgroud)

与此相反,我运行以下查询:

SELECT * FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY ID DESC) AS RowNum, * 
    FROM debug WHERE message LIKE @Filter
) AS tbl 
WHERE RowNum > (@Page*200-200) 
AND RowNum <= (@Page * 200)
ORDER BY ID DESC
Run Code Online (Sandbox Code Playgroud)

这给了我一页200个结果; 但是表中有220k条目(并且正在计数!),过滤和行编号需要相当长的时间(> 30秒).

我有什么办法可以加快获取该页面结果的过程吗?

编辑:所以我已经改为戈登提出的VARCHAR(MAX); 但这并没有加快速度.生成的查询执行计划如下(我尝试将图形重新绘制为ASCII-Art):

                                       Sequence Project                        Clustered Index Scan
    SELECT <- Sort <- Filter <- Top <- (Compute Scalar) <- Segment <- Filter <- [debug].[PK_debug]
Cost: …
Run Code Online (Sandbox Code Playgroud)

sql sql-server

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

计算中间日期

我想在Javascript中计算两个日期之间的中间位置.所以我尝试过:

var middate = (startdate+enddate)/2;
console.log(middate);
Run Code Online (Sandbox Code Playgroud)

哪些日志

NaN
Run Code Online (Sandbox Code Playgroud)

问题是什么?

javascript date

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

写回到列表中

我有一个条目列表,通过以下方式保存到数据库中 - 缩短 - 代码:

List<MyStruct> myStructList = new JavaScriptSerializer().Deserialize<List<MyStruct>>(postdata);

foreach (MyStruct myStruct in myStructList) {
    if(myStruct.id==0) {
        // Not in DB -> insert.
        myStruct.id = (int)db.ExecuteScalar("INSERT INTO table ...");
    } else {
        ...
    }
}
// return all records with id set to auto-increment value.
return myStructList;
Run Code Online (Sandbox Code Playgroud)

我想返回所有带有更新ID的记录 - 但myStruct.id由于foreach 而无法写入.所以我用for循环替换了foreach:

for(int i=0;i<myStructList.Count;i++)   //foreach (MyStruct myStruct in myStructList), but writeable
{
    MyStruct myStruct = myStructList[i]
    if(myStruct.id==0) {
        // Not in DB -> insert.
        myStruct.id = (int)db.ExecuteScalar("INSERT INTO …
Run Code Online (Sandbox Code Playgroud)

c# list visual-studio

0
推荐指数
1
解决办法
74
查看次数

在缓冲网格中以编程方式将行滚动到视图中

我有一个缓冲的分组网格,我想滚动查看某一行(我手头有记录和记录/行的索引)。

我已经尝试过无证

grid.getView().scrollRowIntoView(index)
Run Code Online (Sandbox Code Playgroud)

但这仅适用于无缓冲网格,因为它调用

view.getRow(row)
Run Code Online (Sandbox Code Playgroud)

它只返回当前呈现的行,而不是未呈现的行。

是否有我忽略的官方功能可用,或者我还能做些什么来滚动到正确的记录?

javascript extjs extjs6-classic

0
推荐指数
1
解决办法
1212
查看次数

NLog 记录错误的日期

我正在使用 NLog 4.3.11 运行应用程序。NLog 有一个配置了日期列的数据库:

<target name="database" xsi:type="Database"  dbProvider="System.Data.SqlClient" connectionStringName="${DbConnectionStringName}" commandText="INSERT INTO Log (Logged, Application, Class, Thread,  LogLevel, Message, ExceptionDetails, ActivityId, LoggedInUser) Values (@Logged, @Application, @Class, @Thread,  @LogLevel, @Message, @ExceptionDetails, @ActivityId, @LoggedInUser)">
  <parameter name="@logged" layout="${date}" />
Run Code Online (Sandbox Code Playgroud)

该程序已针对具有各自日期格式的各种德语和英语(美国)Windows Server 2012 和 2016 安装进行了测试;在各种 SQL Server(完整版和快速版)2012、2014 和 2016 实例上都没有问题。日期已正确插入,并由 SSMS 以 ISO 格式正确显示:

2017-06-09 10:24:43.410
Run Code Online (Sandbox Code Playgroud)

然而,在一个系统上,月和日似乎互换了;SSMS 显示如下:

2017-09-06 10:20:43.200
Run Code Online (Sandbox Code Playgroud)

并且MONTH(Logged)也作为 返回9,所以我想我可以排除 SSMS 的问题。

系统也是德国的Server 2012系统,数据库是同一台服务器上的SQL Server Express 2012,系统上的日期格式也是默认的德国(dmY)。日期正确设置为 2017 年 6 月 9 日

在此处输入图片说明

可能是什么问题; 我怎么能告诉 NLog 以与格式无关的方式记录当前日期?

c# date nlog

0
推荐指数
1
解决办法
1134
查看次数

SQL View不接受子条款

我需要从表中的字符串字段获取视图中的布尔字段.True如果字符串已填充,则应为boolean字段:

SELECT (MasterId IS NOT NULL) AS HasMaster FROM entries
Run Code Online (Sandbox Code Playgroud)

但是,这会导致错误:

关键字"IS"附近的语法不正确

为什么这样以及如何解决?

sql t-sql sql-server

0
推荐指数
1
解决办法
136
查看次数