我有多个商店需要具有不同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) 我刚刚将第一个C#WebAPI应用程序交付给第一个客户.在正常负载下,性能最初甚至比我预期的要好.原来.
一切都工作正常,直到某些时候,内存已经启动,垃圾收集开始乱成一团(如"它收集的物品还没有垃圾").那时,有多个W3WP线程,总共有10个ram,每个工人有一个单位数的演出.重新启动IIS后,一切都恢复正常,但当然内存使用率再次上升.
如果我错了,请纠正我,但是
请帮助我:
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) 每次调用我的 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 参数?
我发现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。
如何将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文件 - 它总是希望单个文件上载.
我有一个带有 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) 我有一个使用缓冲渲染器的网格。
对于打印,我将网格DOM复制到新窗口中,然后将其发送到打印机。为此,必须完全渲染DOM,但对于带缓冲的渲染器,则不是。
如果需要的话,我将完全禁用缓冲的渲染器,但是由于只有少数用户使用打印功能,所以我宁愿不使用它。
是否有可能在获取DOM之前暂时关闭bufferedRenderer,然后再将其重新打开?
我有一个包含调试消息的表,定义如下:
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) 我想在Javascript中计算两个日期之间的中间位置.所以我尝试过:
var middate = (startdate+enddate)/2;
console.log(middate);
Run Code Online (Sandbox Code Playgroud)
哪些日志
NaN
Run Code Online (Sandbox Code Playgroud)
问题是什么?
我有一个条目列表,通过以下方式保存到数据库中 - 缩短 - 代码:
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) 我有一个缓冲的分组网格,我想滚动查看某一行(我手头有记录和记录/行的索引)。
我已经尝试过无证
grid.getView().scrollRowIntoView(index)
Run Code Online (Sandbox Code Playgroud)
但这仅适用于无缓冲网格,因为它调用
view.getRow(row)
Run Code Online (Sandbox Code Playgroud)
它只返回当前呈现的行,而不是未呈现的行。
是否有我忽略的官方功能可用,或者我还能做些什么来滚动到正确的记录?
我正在使用 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 以与格式无关的方式记录当前日期?
我需要从表中的字符串字段获取视图中的布尔字段.True如果字符串已填充,则应为boolean字段:
SELECT (MasterId IS NOT NULL) AS HasMaster FROM entries
Run Code Online (Sandbox Code Playgroud)
但是,这会导致错误:
关键字"IS"附近的语法不正确
为什么这样以及如何解决?
c# ×7
extjs ×3
javascript ×3
date ×2
sql ×2
sql-server ×2
.net ×1
asp.net ×1
asp.net-mvc ×1
azure ×1
cookies ×1
json ×1
list ×1
memory-leaks ×1
nlog ×1
oauth-2.0 ×1
t-sql ×1