关于实体框架,有很长时间以来一直困扰着我.
去年我为使用EF的客户编写了一个大型应用程序.在开发过程中,一切都很顺利.
我们八月发货了.但几周后我开始在生产服务器上看到奇怪的内存泄漏.运行几天后,我的ASP.NET MVC 4进程占用了机器的所有资源(8 GB).这不好.我在网上搜索,看到你应该在一个using()块中包围所有的EF查询和操作,以便可以处理上下文.
在一天中,我重构了我要使用的所有代码using(),这解决了我的问题,因为这个过程依赖于稳定的内存使用.
我首先没有围绕我的查询的原因是我从Visualofite中包含的Microsofts自己的脚手架开始了我的第一个控制器和存储库,这些没有使用包围它的查询,而是它具有DbContext作为实例变量的控制器本身.
首先:如果处理上下文非常重要(某些事情不会很奇怪,dbconnection需要关闭等等),微软可能应该在他们的所有示例中都有这个!
现在,我已开始与我在我的后脑勺所有学习收获一个新的大项目工作,我一直在试用的.NET 4.5和EF 6的新功能async和await.EF 6.0具有所有这些异步方法(例如SaveChangesAsync,ToListAsync等等).
public Task<tblLanguage> Post(tblLanguage language)
{
using (var langRepo = new TblLanguageRepository(new Entities()))
{
return langRepo.Add(RequestOrganizationTypeEnum, language);
}
}
Run Code Online (Sandbox Code Playgroud)
在课堂上TblLanguageRepo:
public async Task<tblLanguage> Add(OrganizationTypeEnum requestOrganizationTypeEnum, tblLanguage language)
{
...
await Context.SaveChangesAsync();
return langaugeDb;
}
Run Code Online (Sandbox Code Playgroud)
但是,当我现在在一个using()块中包含我的语句时,我得到异常DbContext was disposed,在查询能够返回之前.这是预期的行为.查询运行async,using块在查询之前完成.但是在使用ef 6的async和await函数时,我应该如何以适当的方式处理我的上下文?
请指出我正确的方向.
是using()需要EF 6?为什么微软自己的例子从未有过这样的特色?如何正确使用异步功能并处理上下文?
我正在尝试新的Xcode 4.2 Beta,我想知道我的代码是错误的还是我碰到了一个bug.
新的故事板功能很有前途,但目前非常多.现在我用tableview创建了一个简单的项目.此tableview将是包含UITextFields的"分组样式".故事板的新"原型单元"功能允许您在GUI中创建原型单元,您可以使用方法cellForRowAtIndexPath中的"重用标识符"进行绘制.当我在这个"原型单元格"中拖入UITextField并将其绘制出来时,效果很好!
然而!当我将此文本字段引用到我的代码中的插座时,我收到错误:未分类编译失败.无法写入路径:...(DerivedData的路径)
为什么是这样?这是一个错误吗?其他人得到这个吗?
我正在使用Apples Photos Framework将PHAssetCollections加载到我的应用程序中.我总是得到智能收藏的英文名称.例如,我得到'收藏'而不是'收藏家'(瑞典语).我认为localizedTitle属性将返回模拟器或iPhone运行的语言.(在具有瑞典语和地区的iPhone上运行).
有人遇到过这种情况么?示例代码:
NSArray *collectionsFetchResults;
NSMutableArray *localizedTitles = [[NSMutableArray alloc] init];
PHFetchResult *smartAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum
subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];
PHFetchResult *syncedAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum
subtype:PHAssetCollectionSubtypeAlbumSyncedAlbum options:nil];
PHFetchResult *userCollections = [PHCollectionList fetchTopLevelUserCollectionsWithOptions:nil];
// Add each PHFetchResult to the array
collectionsFetchResults = @[smartAlbums, userCollections, syncedAlbums];
for (int i = 0; i < collectionsFetchResults.count; i ++) {
PHFetchResult *fetchResult = collectionsFetchResults[i];
for (int x = 0; x < fetchResult.count; x ++) {
PHCollection *collection = fetchResult[x];
localizedTitles[x] = collection.localizedTitle;
NSLog(@"%@", collection.localizedTitle); //<= Always …Run Code Online (Sandbox Code Playgroud) 我正在为iPhone编写客户端 - 服务器应用程序.我有一个关于线程的问题.当我从设备访问我的在线数据库时,我需要在单独的线程上执行此操作以不冻结UI /主线程.但是当响应我从数据库中获取的数据时,我在主线程上调用此方法:performSelectorOnMainThread.问题是,这只允许我向方法(WithObject)发送一个参数/对象,有时我有更多我想传递的参数.关于它的另一件事是我必须通过这一个对象.如果我发现应用程序崩溃,我无法通过nil.
这是我今天的代码..我担心我正在使用这些方法并以错误的方式进行操作.
- (IBAction)testServerAction:(id)sender {
[self.imageView setHidden:YES];
[self.activityView setHidden:NO];
[self.activityView startAnimating];
dispatch_queue_t testServer = dispatch_queue_create("Test-Server-Thread", NULL);
dispatch_async(testServer, ^{
if ([self.arrayWithServerConnections count] > 0)
{
NSString *messageToShow;
if ([self testServerMethod])
{
messageToShow = @"Server is working!";
[self performSelectorOnMainThread:@selector(showMessageBoxWithString:) withObject:messageToShow waitUntilDone:YES];
[self performSelectorOnMainThread:@selector(threadedUIActivityRemover:) withObject:nil waitUntilDone:YES];
}else
{
messageToShow = @"Server is NOT working!";
[self performSelectorOnMainThread:@selector(showMessageBoxWithString:) withObject:messageToShow waitUntilDone:YES];
[self performSelectorOnMainThread:@selector(threadedUIActivityRemover:) withObject:nil waitUntilDone:YES];
}
}
});
dispatch_release(testServer);
}
-(void)threadedUIActivityRemover:(NSString *)string
{
[self.imageView setHidden:NO];
[self.activityView setHidden:YES];
[self.activityView stopAnimating];
}
Run Code Online (Sandbox Code Playgroud)
这是一个很好的方法吗,除了performSelectorOnMainThread还有什么可以指向我,这更好吗?
正如你所看到的,在这个例子中我将nil传递给NSString参数,因为我必须传递一些东西,如果我没有NSString作为方法中的arg,应用程序在传递nil时崩溃evan ..为什么这个?请让我对此更清楚一点! …
我已经开始学习如何在Objective-C中使用块/函数/ lambda.但我不能让它与Objects一起工作.可能我错过了一些指针,但是它不起作用.这是我目前的代码:
MyEventArgs (^skapaEventArg)(Operation);
skapaEventArg = ^(Operation a) { return *[[MyEventArgs alloc] initWithOperation:a]; };
MyEventArgs *a = skapaEventArg(Add);
Run Code Online (Sandbox Code Playgroud)
但是我得到了这张照片显示的错误:
http://img18.imageshack.us/img18/7499/blocksab.png
如果我做
MyEventArgs a = skapaEventArg(Add);
Run Code Online (Sandbox Code Playgroud)
把它放在堆栈上,Xcode给了我通常的"接口不能静态分配" - 错误
如何使用块来使这个简单的代码工作?
objective-c ×3
xcode ×3
.net ×1
asynchronous ×1
c# ×1
function ×1
ios ×1
iphone ×1
lambda ×1
storyboard ×1
using ×1